Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/rest_framework/schemas/views.py: 41%
29 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1"""
2views.py # Houses `SchemaView`, `APIView` subclass.
4See schemas.__init__.py for package overview.
5"""
6from rest_framework import exceptions, renderers
7from rest_framework.response import Response
8from rest_framework.schemas import coreapi
9from rest_framework.settings import api_settings
10from rest_framework.views import APIView
13class SchemaView(APIView):
14 _ignore_model_permissions = True
15 schema = None # exclude from schema
16 renderer_classes = None
17 schema_generator = None
18 public = False
20 def __init__(self, *args, **kwargs):
21 super().__init__(*args, **kwargs)
22 if self.renderer_classes is None:
23 if coreapi.is_enabled():
24 self.renderer_classes = [
25 renderers.CoreAPIOpenAPIRenderer,
26 renderers.CoreJSONRenderer
27 ]
28 else:
29 self.renderer_classes = [
30 renderers.OpenAPIRenderer,
31 renderers.JSONOpenAPIRenderer,
32 ]
33 if renderers.BrowsableAPIRenderer in api_settings.DEFAULT_RENDERER_CLASSES:
34 self.renderer_classes += [renderers.BrowsableAPIRenderer]
36 def get(self, request, *args, **kwargs):
37 schema = self.schema_generator.get_schema(request, self.public)
38 if schema is None:
39 raise exceptions.PermissionDenied()
40 return Response(schema)
42 def handle_exception(self, exc):
43 # Schema renderers do not render exceptions, so re-perform content
44 # negotiation with default renderers.
45 self.renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
46 neg = self.perform_content_negotiation(self.request, force=True)
47 self.request.accepted_renderer, self.request.accepted_media_type = neg
48 return super().handle_exception(exc)