Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
pp-django / pp_django / routers.py
Size: Mime:
import sys

from openapi_codec import OpenAPICodec
from rest_framework import renderers
from rest_framework.routers import DefaultRouter


class SwaggerRenderer(renderers.BaseRenderer):
    media_type = "application/openapi+json"
    charset = None
    format = "openapi"

    def render(self, data, media_type=None, renderer_context=None):
        codec = OpenAPICodec()
        return codec.dump(data)


class Router(DefaultRouter):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.root_renderers is None:
            self.root_renderers = []
        self.root_renderers.append(SwaggerRenderer)

    def register(self, prefix, viewset, basename=None):
        super().register(prefix, viewset, basename)

        if not basename:
            return

        if "/" in basename:
            sys.stderr.write("basenames with '/' are not allowed\n")
            sys.exit(1)

        sanitized_prefix = prefix.replace("/", "_")
        valid_basename = any(
            [
                prefix.startswith(basename + "/"),
                basename.startswith(prefix.split("/")[0] + "_"),
                basename == sanitized_prefix,
                basename == prefix,
            ]
        )

        if not valid_basename:
            sys.stderr.write(
                f"basename is not equal to prefix or sanitized_prefix (from pp-django): "
                f"prefix={prefix} sanitized_prefix={sanitized_prefix} "
                f"viewset={viewset} basename={basename}\n"
            )
            sys.exit(1)