From 5cb9d1a39eb8aa67db5f82e8d77850ade852dffa Mon Sep 17 00:00:00 2001 From: Steven Sklar Date: Wed, 31 Oct 2018 14:10:23 -0400 Subject: [PATCH] Adds available endpoint formats to the autogenerated schema --- rest_framework/schemas/inspectors.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/rest_framework/schemas/inspectors.py b/rest_framework/schemas/inspectors.py index 02a38f351..3cd2ac7e2 100644 --- a/rest_framework/schemas/inspectors.py +++ b/rest_framework/schemas/inspectors.py @@ -212,6 +212,7 @@ class AutoSchema(ViewInspector): fields += self.get_serializer_fields(path, method) fields += self.get_pagination_fields(path, method) fields += self.get_filter_fields(path, method) + fields += self.get_renderer_fields(path, method) manual_fields = self.get_manual_fields(path, method) fields = self.update_fields(fields, manual_fields) @@ -409,6 +410,26 @@ class AutoSchema(ViewInspector): fields += filter_backend().get_schema_fields(self.view) return fields + def get_renderer_fields(self, path, method): + view = self.view + renderers = api_settings.DEFAULT_RENDERER_CLASSES + + if getattr(view, "renderer_classes", None) and view.renderer_classes: + renderers = view.renderer_classes + + formats = [r.format for r in renderers if r.format] + + field = coreapi.Field( + name="format", + location="query", + required=False, + schema=coreschema.Enum(title="Response format", + description="Specify a custom format for the response", + enum=formats) + ) + + return [field] + def get_manual_fields(self, path, method): return self._manual_fields