Repository URL to install this package:
|
Version:
1.0.7 ▾
|
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)