Source code for api.posts.pagination

from typing import Sequence

from django.db.models import QuerySet
from rest_framework.pagination import LimitOffsetPagination


[docs] class SearchPagination(LimitOffsetPagination): """ A custom pagination class that paginates Elasticsearch querysets. Uses custom offset and limit query parameters. """
[docs] def paginate_queryset(self, queryset, request, view=None): """ Paginate a queryset if a `search` parameter is present in the request. Args: queryset: The queryset to paginate. request: The HTTP request object. view: The view associated with the request. Returns: The paginated queryset or the original queryset if `search` parameter is present. """ search_param = request.query_params.get("search") self.offset = self.get_offset(request) self.limit = self.get_limit(request) self.count = self.get_count(queryset) self.request = request if search_param: return queryset return super().paginate_queryset(queryset, request, view)
[docs] def get_count(self, queryset: QuerySet | Sequence) -> int: """ Get the count of the queryset. If the queryset has a `search_count` attribute, use it as the count. Args: queryset: The queryset to count. Returns: The count of the queryset. """ if hasattr(queryset, "search_count"): return queryset.search_count return super().get_count(queryset)