Do not generate full schema in UI views
parent
cbae10c434
commit
207a7e2b2d
|
|
@ -17,6 +17,7 @@
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/testproj" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/testproj" isTestSource="false" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.pytest_cache" />
|
<excludeFolder url="file://$MODULE_DIR$/.pytest_cache" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/dist" />
|
<excludeFolder url="file://$MODULE_DIR$/dist" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/docs/.doctrees" />
|
<excludeFolder url="file://$MODULE_DIR$/docs/.doctrees" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/docs/_build" />
|
<excludeFolder url="file://$MODULE_DIR$/docs/_build" />
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class _SpecRenderer(BaseRenderer):
|
||||||
|
|
||||||
if not isinstance(data, Swagger): # pragma: no cover
|
if not isinstance(data, Swagger): # pragma: no cover
|
||||||
# if `swagger` is not a ``Swagger`` object, it means we somehow got a non-success ``Response``
|
# if `swagger` is not a ``Swagger`` object, it means we somehow got a non-success ``Response``
|
||||||
# in that case, it's probably better to let the default ``TemplateHTMLRenderer`` render it
|
# in that case, it's probably better to let the default ``JSONRenderer`` render it
|
||||||
# see https://github.com/axnsan12/drf-yasg/issues/58
|
# see https://github.com/axnsan12/drf-yasg/issues/58
|
||||||
return JSONRenderer().render(data, media_type, renderer_context)
|
return JSONRenderer().render(data, media_type, renderer_context)
|
||||||
return codec.encode(data)
|
return codec.encode(data)
|
||||||
|
|
@ -68,15 +68,11 @@ class _UIRenderer(BaseRenderer):
|
||||||
# see https://github.com/axnsan12/drf-yasg/issues/58
|
# see https://github.com/axnsan12/drf-yasg/issues/58
|
||||||
return TemplateHTMLRenderer().render(swagger, accepted_media_type, renderer_context)
|
return TemplateHTMLRenderer().render(swagger, accepted_media_type, renderer_context)
|
||||||
self.set_context(renderer_context, swagger)
|
self.set_context(renderer_context, swagger)
|
||||||
return render(
|
return render(renderer_context['request'], self.template, renderer_context)
|
||||||
renderer_context['request'],
|
|
||||||
self.template,
|
|
||||||
renderer_context
|
|
||||||
)
|
|
||||||
|
|
||||||
def set_context(self, renderer_context, swagger):
|
def set_context(self, renderer_context, swagger=None):
|
||||||
renderer_context['title'] = swagger.info.title
|
renderer_context['title'] = swagger.info.title or '' if swagger else ''
|
||||||
renderer_context['version'] = swagger.info.version
|
renderer_context['version'] = swagger.info.version or '' if swagger else ''
|
||||||
renderer_context['oauth2_config'] = json.dumps(self.get_oauth2_config())
|
renderer_context['oauth2_config'] = json.dumps(self.get_oauth2_config())
|
||||||
renderer_context['USE_SESSION_AUTH'] = swagger_settings.USE_SESSION_AUTH
|
renderer_context['USE_SESSION_AUTH'] = swagger_settings.USE_SESSION_AUTH
|
||||||
renderer_context.update(self.get_auth_urls())
|
renderer_context.update(self.get_auth_urls())
|
||||||
|
|
@ -119,7 +115,7 @@ class SwaggerUIRenderer(_UIRenderer):
|
||||||
template = 'drf-yasg/swagger-ui.html'
|
template = 'drf-yasg/swagger-ui.html'
|
||||||
format = 'swagger'
|
format = 'swagger'
|
||||||
|
|
||||||
def set_context(self, renderer_context, swagger):
|
def set_context(self, renderer_context, swagger=None):
|
||||||
super(SwaggerUIRenderer, self).set_context(renderer_context, swagger)
|
super(SwaggerUIRenderer, self).set_context(renderer_context, swagger)
|
||||||
renderer_context['swagger_settings'] = json.dumps(self.get_swagger_ui_settings())
|
renderer_context['swagger_settings'] = json.dumps(self.get_swagger_ui_settings())
|
||||||
|
|
||||||
|
|
@ -152,7 +148,7 @@ class ReDocRenderer(_UIRenderer):
|
||||||
template = 'drf-yasg/redoc.html'
|
template = 'drf-yasg/redoc.html'
|
||||||
format = 'redoc'
|
format = 'redoc'
|
||||||
|
|
||||||
def set_context(self, renderer_context, swagger):
|
def set_context(self, renderer_context, swagger=None):
|
||||||
super(ReDocRenderer, self).set_context(renderer_context, swagger)
|
super(ReDocRenderer, self).set_context(renderer_context, swagger)
|
||||||
renderer_context['redoc_settings'] = json.dumps(self.get_redoc_settings())
|
renderer_context['redoc_settings'] = json.dumps(self.get_redoc_settings())
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -273,7 +273,7 @@ def merge_params(parameters, overrides):
|
||||||
def filter_none(obj):
|
def filter_none(obj):
|
||||||
"""Remove ``None`` values from tuples, lists or dictionaries. Return other objects as-is.
|
"""Remove ``None`` values from tuples, lists or dictionaries. Return other objects as-is.
|
||||||
|
|
||||||
:param obj:
|
:param obj: the object
|
||||||
:return: collection with ``None`` values removed
|
:return: collection with ``None`` values removed
|
||||||
"""
|
"""
|
||||||
if obj is None:
|
if obj is None:
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ from rest_framework.views import APIView
|
||||||
|
|
||||||
from .app_settings import swagger_settings
|
from .app_settings import swagger_settings
|
||||||
from .renderers import (
|
from .renderers import (
|
||||||
OpenAPIRenderer, ReDocOldRenderer, ReDocRenderer, SwaggerJSONRenderer, SwaggerUIRenderer, SwaggerYAMLRenderer
|
OpenAPIRenderer, ReDocOldRenderer, ReDocRenderer, SwaggerJSONRenderer, SwaggerUIRenderer, SwaggerYAMLRenderer,
|
||||||
|
_SpecRenderer
|
||||||
)
|
)
|
||||||
|
|
||||||
SPEC_RENDERERS = (SwaggerYAMLRenderer, SwaggerJSONRenderer, OpenAPIRenderer)
|
SPEC_RENDERERS = (SwaggerYAMLRenderer, SwaggerJSONRenderer, OpenAPIRenderer)
|
||||||
|
|
@ -85,7 +86,12 @@ def get_schema_view(info=None, url=None, patterns=None, urlconf=None, public=Fal
|
||||||
renderer_classes = _spec_renderers
|
renderer_classes = _spec_renderers
|
||||||
|
|
||||||
def get(self, request, version='', format=None):
|
def get(self, request, version='', format=None):
|
||||||
generator = self.generator_class(info, request.version or version or '', url, patterns, urlconf)
|
version = request.version or version or ''
|
||||||
|
if isinstance(request.accepted_renderer, _SpecRenderer):
|
||||||
|
generator = self.generator_class(info, version, url, patterns, urlconf)
|
||||||
|
else:
|
||||||
|
generator = self.generator_class(info, version, url, patterns=[])
|
||||||
|
|
||||||
schema = generator.get_schema(request, self.public)
|
schema = generator.get_schema(request, self.public)
|
||||||
if schema is None:
|
if schema is None:
|
||||||
raise exceptions.PermissionDenied() # pragma: no cover
|
raise exceptions.PermissionDenied() # pragma: no cover
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue