aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/pagination.py
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps/api/pagination.py')
-rw-r--r--pydis_site/apps/api/pagination.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/pydis_site/apps/api/pagination.py b/pydis_site/apps/api/pagination.py
new file mode 100644
index 00000000..bd8d963d
--- /dev/null
+++ b/pydis_site/apps/api/pagination.py
@@ -0,0 +1,49 @@
+import typing
+
+from rest_framework.pagination import LimitOffsetPagination
+from rest_framework.response import Response
+
+
+class LimitOffsetPaginationExtended(LimitOffsetPagination):
+ """
+ Extend LimitOffsetPagination to customise the default response.
+
+ For example:
+
+ ## Default response
+ {
+ "count": 1,
+ "next": null,
+ "previous": null,
+ "results": [{
+ "id": 6,
+ "inserted_at": "2021-01-26T21:13:35.477879Z",
+ "expires_at": null,
+ "active": false,
+ "user": 1,
+ "actor": 2,
+ "type": "warning",
+ "reason": null,
+ "hidden": false
+ }]
+ }
+ ## Required response
+ [{
+ "id": 6,
+ "inserted_at": "2021-01-26T21:13:35.477879Z",
+ "expires_at": null,
+ "active": false,
+ "user": 1,
+ "actor": 2,
+ "type": "warning",
+ "reason": null,
+ "hidden": false
+ }]
+
+ """
+
+ default_limit = 100
+
+ def get_paginated_response(self, data: typing.Any) -> Response:
+ """Override to skip metadata i.e. `count`, `next` and `previous`."""
+ return Response(data)