2017-09-14 11:46:34 +03:00
|
|
|
"""
|
|
|
|
views.py # Houses `SchemaView`, `APIView` subclass.
|
|
|
|
|
|
|
|
See schemas.__init__.py for package overview.
|
|
|
|
"""
|
|
|
|
from rest_framework import exceptions, renderers
|
|
|
|
from rest_framework.response import Response
|
|
|
|
from rest_framework.settings import api_settings
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
|
|
|
|
|
|
class SchemaView(APIView):
|
|
|
|
_ignore_model_permissions = True
|
2017-09-20 12:29:47 +03:00
|
|
|
schema = None # exclude from schema
|
2017-09-14 11:46:34 +03:00
|
|
|
renderer_classes = None
|
|
|
|
schema_generator = None
|
|
|
|
public = False
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
super(SchemaView, self).__init__(*args, **kwargs)
|
|
|
|
if self.renderer_classes is None:
|
2018-10-04 16:05:55 +03:00
|
|
|
self.renderer_classes = [
|
|
|
|
renderers.OpenAPIRenderer,
|
|
|
|
renderers.CoreJSONRenderer
|
|
|
|
]
|
2017-09-14 11:46:34 +03:00
|
|
|
if renderers.BrowsableAPIRenderer in api_settings.DEFAULT_RENDERER_CLASSES:
|
2018-10-04 16:05:55 +03:00
|
|
|
self.renderer_classes += [renderers.BrowsableAPIRenderer]
|
2017-09-14 11:46:34 +03:00
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
schema = self.schema_generator.get_schema(request, self.public)
|
|
|
|
if schema is None:
|
|
|
|
raise exceptions.PermissionDenied()
|
|
|
|
return Response(schema)
|