Source code for api.v2.pagination

"""Pagination utilities."""

from typing import Any, Dict, List

from rest_framework.pagination import BasePagination, PageNumberPagination
from rest_framework.response import Response


[docs]class DummyPagination(BasePagination): """Dummy pagination class that simply wraps results."""
[docs] def to_html(self) -> str: return ''
[docs] def paginate_queryset(self, *args, **kwargs) -> List: return list(args[0])
[docs] def get_paginated_response(self, data: Any) -> Response: return Response({'results': data})
[docs] def get_paginated_response_schema(self, schema: Dict) -> Dict: return {'type': 'object', 'properties': {'results': schema}}
[docs]class PageLimitPagination(PageNumberPagination): """Pagination class that allows the user to limit the page size.""" page_size_query_param = 'limit'
[docs] def get_paginated_response(self, data: Any) -> Response: return Response({ 'total': self.page.paginator.count, # type: ignore 'last': not self.page.has_next(), # type: ignore 'results': data })
[docs] def get_paginated_response_schema(self, schema: Dict) -> Dict: return { 'type': 'object', 'properties': { 'total': { 'type': 'integer', 'example': self.page_size, 'description': 'The total number of results across pages.' }, 'last': { 'type': 'boolean', 'example': False, 'description': 'Denotes whether this is the last page.' }, 'results': schema } }
[docs] def get_schema_operation_parameters(self, view: Any) -> List[Dict]: params = super().get_schema_operation_parameters(view) params[0]['schema']['minimum'] = 1 # TODO: use dict union (Py3.9+) params[1]['schema'].update({ 'minimum': 1, 'default': self.page_size }) return params
__all__ = ['DummyPagination', 'PageLimitPagination']