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

1""" 

2views.py # Houses `SchemaView`, `APIView` subclass. 

3 

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 

11 

12 

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 

19 

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] 

35 

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) 

41 

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)