Add distinction between request and response serializers

This commit is contained in:
Denis Orehovsky 2020-07-23 13:06:44 +03:00
parent 4b06e0a5a1
commit b59996756b

View File

@ -192,15 +192,22 @@ class AutoSchema(ViewInspector):
if method.lower() == 'delete': if method.lower() == 'delete':
return {} return {}
serializer = self.get_serializer(path, method) request_serializer = self.get_request_serializer(path, method)
response_serializer = self.get_response_serializer(path, method)
if not isinstance(serializer, serializers.Serializer): components = {}
return {}
component_name = self.get_component_name(serializer) if isinstance(request_serializer, serializers.Serializer):
component_name = self.get_component_name(request_serializer)
content = self.map_serializer(request_serializer)
components.setdefault(component_name, content)
content = self.map_serializer(serializer) if isinstance(response_serializer, serializers.Serializer):
return {component_name: content} component_name = self.get_component_name(response_serializer)
content = self.map_serializer(response_serializer)
components.setdefault(component_name, content)
return components
def _to_camel_case(self, snake_str): def _to_camel_case(self, snake_str):
components = snake_str.split('_') components = snake_str.split('_')
@ -615,6 +622,12 @@ class AutoSchema(ViewInspector):
.format(view.__class__.__name__, method, path)) .format(view.__class__.__name__, method, path))
return None return None
def get_request_serializer(self, path, method):
return self.get_serializer(path, method)
def get_response_serializer(self, path, method):
return self.get_serializer(path, method)
def _get_reference(self, serializer): def _get_reference(self, serializer):
return {'$ref': '#/components/schemas/{}'.format(self.get_component_name(serializer))} return {'$ref': '#/components/schemas/{}'.format(self.get_component_name(serializer))}
@ -624,7 +637,7 @@ class AutoSchema(ViewInspector):
self.request_media_types = self.map_parsers(path, method) self.request_media_types = self.map_parsers(path, method)
serializer = self.get_serializer(path, method) serializer = self.get_request_serializer(path, method)
if not isinstance(serializer, serializers.Serializer): if not isinstance(serializer, serializers.Serializer):
item_schema = {} item_schema = {}
@ -648,7 +661,7 @@ class AutoSchema(ViewInspector):
self.response_media_types = self.map_renderers(path, method) self.response_media_types = self.map_renderers(path, method)
serializer = self.get_serializer(path, method) serializer = self.get_response_serializer(path, method)
if not isinstance(serializer, serializers.Serializer): if not isinstance(serializer, serializers.Serializer):
item_schema = {} item_schema = {}