From 9a22e5aef013a02947e33cfc31f3150f1a5bf8a0 Mon Sep 17 00:00:00 2001 From: puckoprutt Date: Tue, 18 Feb 2025 20:55:59 +0100 Subject: [PATCH] setup a base for pagination shieeet --- settings/puckignation.py | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 settings/puckignation.py diff --git a/settings/puckignation.py b/settings/puckignation.py new file mode 100644 index 0000000..b50acd7 --- /dev/null +++ b/settings/puckignation.py @@ -0,0 +1,54 @@ +from rest_framework.pagination import LimitOffsetPagination +from rest_framework.response import Response + +class PuckignationMixin(LimitOffsetPagination): + + def get_paginated_response(self, data, status=200): + return Response({ + 'count': self.count, + 'next': self.get_next_link(), + 'previous': self.get_previous_link(), + 'results': data + }, status=status) + + def get_paginated_response_schema(self, schema, *args, **kwargs): + return { + 'type': 'object', + 'required': ['count', 'results'], + 'properties': { + 'count': { + 'type': 'integer', + 'example': 123, + }, + 'next': { + 'type': 'string', + 'nullable': True, + 'format': 'uri', + 'example': 'http://pfapi.puckoprutt.tech/actions/?format=yaml&{offset_param}=30&{limit_param}=10'.format( + offset_param=self.offset_query_param, limit_param=self.limit_query_param), + }, + 'previous': { + 'type': 'string', + 'nullable': True, + 'format': 'uri', + 'example': 'http://pfapi.puckoprutt.tech/actions/?format=yaml&{offset_param}=10&{limit_param}=10'.format( + offset_param=self.offset_query_param, limit_param=self.limit_query_param), + }, + 'results': schema, + } + } + +class SmallPagination(PuckignationMixin): + page_size = 10 + page_size_query_param = "page_size" + max_page_size = 25 + +class MediumPagination(PuckignationMixin): + page_size = 25 + page_size_query_param = "page_size" + max_page_size = 55 + +class LargePagination(PuckignationMixin): + page_size = 100 + page_size_query_param = "page_size" + max_page_size = 200