Handle pagination

This commit is contained in:
Bill Collins 2022-03-20 16:39:48 +00:00
parent 764e399cfd
commit 8f85944fa7
2 changed files with 19 additions and 8 deletions

View File

@ -192,6 +192,9 @@ class AutoSchema(ViewInspector):
return component_name return component_name
def get_paginated_component_name(self, serializer):
return 'Paginated' + self.get_component_name(serializer, 'GET')
def get_error_component_name(self, serializer): def get_error_component_name(self, serializer):
return self.get_component_name(serializer, 'GET') + 'Error' return self.get_component_name(serializer, 'GET') + 'Error'
@ -716,6 +719,9 @@ class AutoSchema(ViewInspector):
def _get_reference(self, serializer, method): def _get_reference(self, serializer, method):
return {'$ref': '#/components/schemas/{}'.format(self.get_component_name(serializer, method))} return {'$ref': '#/components/schemas/{}'.format(self.get_component_name(serializer, method))}
def _get_paginated_reference(self, serializer):
return {'$ref': '#/components/schemas/{}'.format(self.get_paginated_component_name(serializer))}
def _get_error_reference(self, serializer): def _get_error_reference(self, serializer):
return {'$ref': '#/components/schemas/{}'.format(self.get_error_component_name(serializer))} return {'$ref': '#/components/schemas/{}'.format(self.get_error_component_name(serializer))}
@ -763,7 +769,9 @@ class AutoSchema(ViewInspector):
} }
paginator = self.get_paginator() paginator = self.get_paginator()
if 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: else:
response_schema = item_schema response_schema = item_schema
status_code = '201' if method == 'POST' else '200' status_code = '201' if method == 'POST' else '200'

View File

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