mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-09 08:00:52 +03:00
* Initial Refactor Step
* Add descriptor class
* call from generator
* proxy back to generator for implementation.
* Move `get_link` to descriptor
* Move `get_description` to descriptor
* Remove need for generator in get_description
* Move get_path_fields to descriptor
* Move `get_serializer_fields` to descriptor
* Move `get_pagination_fields` to descriptor
* Move `get_filter_fields` to descriptor
* Move `get_encoding` to descriptor.
* Pass just `url` from SchemaGenerator to descriptor
* Make `view` a property
Encapsulates check for a view instance.
* Adjust API Reference docs
* Add `ManualSchema` class
* Refactor to `ViewInspector` plus `AutoSchema`
The interface then is **just** `get_link()`
* Add `manual_fields` kwarg to AutoSchema
* Add schema decorator for FBVs
* Adjust comments
* Docs: Provide full params in example
Ref feedback b52e372f8f (r137254795)
* Add docstring for ViewInstpector.__get__ descriptor method.
Ref https://github.com/encode/django-rest-framework/pull/5354#discussion_r137265022
* Make `schemas` a package.
* Split generators, inspectors, views.
* Adjust imports
* Rename to EndpointEnumerator
* Adjust ManualSchema to take `fields`
… and `description`.
Allows `url` and `action` to remain dynamic
* Add package/module docstrings
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
"""
|
|
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
|
|
exclude_from_schema = True
|
|
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:
|
|
if renderers.BrowsableAPIRenderer in api_settings.DEFAULT_RENDERER_CLASSES:
|
|
self.renderer_classes = [
|
|
renderers.CoreJSONRenderer,
|
|
renderers.BrowsableAPIRenderer,
|
|
]
|
|
else:
|
|
self.renderer_classes = [renderers.CoreJSONRenderer]
|
|
|
|
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)
|