Handle pagination

This commit is contained in:
Bill Collins 2022-03-20 16:39:48 +00:00 committed by Bill Collins
parent 34aa586820
commit 159c92ffbd
2 changed files with 19 additions and 8 deletions

View File

@ -185,6 +185,9 @@ class AutoSchema(ViewInspector):
return component_name
def get_paginated_component_name(self, serializer):
return 'Paginated' + self.get_component_name(serializer)
def get_error_component_name(self, serializer):
return self.get_component_name(serializer) + 'Error'
@ -695,6 +698,9 @@ class AutoSchema(ViewInspector):
def _get_reference(self, serializer):
return {'$ref': '#/components/schemas/{}'.format(self.get_component_name(serializer))}
def _get_paginated_reference(self, serializer):
return {'$ref': '#/components/schemas/{}'.format(self.get_paginated_component_name(serializer))}
def _get_error_reference(self, serializer):
return {'$ref': '#/components/schemas/{}'.format(self.get_error_component_name(serializer))}
@ -742,7 +748,9 @@ class AutoSchema(ViewInspector):
}
paginator = self.get_paginator()
if paginator:
response_schema = paginator.get_paginated_response_schema(response_schema)
pagination_schema = paginator.get_paginated_response_schema(response_schema)
self.components[self.get_paginated_component_name(serializer)] = pagination_schema
response_schema = self._get_paginated_reference(serializer)
else:
response_schema = item_schema
status_code = '201' if method == 'POST' else '200'

View File

@ -472,6 +472,15 @@ class TestOperationIntrospection(TestCase):
'content': {
'application/json': {
'schema': {
'$ref': '#/components/schemas/PaginatedItem',
},
},
},
},
}
components = inspector.get_components(path, method)
assert components == {
'PaginatedItem': {
'type': 'object',
'item': {
'type': 'array',
@ -480,12 +489,6 @@ class TestOperationIntrospection(TestCase):
},
},
},
},
},
},
}
components = inspector.get_components(path, method)
assert components == {
'Item': {
'type': 'object',
'properties': {