angrybeanie_wagtail/env/lib/python3.12/site-packages/wagtail/api/v2/pagination.py
2025-07-25 21:32:16 +10:00

53 lines
1.6 KiB
Python

from collections import OrderedDict
from django.conf import settings
from rest_framework.pagination import BasePagination
from rest_framework.response import Response
from .utils import BadRequestError
class WagtailPagination(BasePagination):
def paginate_queryset(self, queryset, request, view=None):
limit_max = getattr(settings, "WAGTAILAPI_LIMIT_MAX", 20)
try:
offset = int(request.GET.get("offset", 0))
if offset < 0:
raise ValueError()
except ValueError:
raise BadRequestError("offset must be a positive integer")
try:
limit_default = 20 if not limit_max else min(20, limit_max)
limit = int(request.GET.get("limit", limit_default))
if limit < 0:
raise ValueError()
except ValueError:
raise BadRequestError("limit must be a positive integer")
if limit_max and limit > limit_max:
raise BadRequestError("limit cannot be higher than %d" % limit_max)
start = offset
stop = offset + limit
self.view = view
self.total_count = queryset.count()
return queryset[start:stop]
def get_paginated_response(self, data):
data = OrderedDict(
[
(
"meta",
OrderedDict(
[
("total_count", self.total_count),
]
),
),
("items", data),
]
)
return Response(data)