47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
"""
|
|
Custom pagination classes for the API.
|
|
"""
|
|
from rest_framework.pagination import PageNumberPagination
|
|
from rest_framework.response import Response
|
|
|
|
|
|
class StandardResultsSetPagination(PageNumberPagination):
|
|
"""
|
|
Standard pagination for API responses.
|
|
"""
|
|
page_size = 50
|
|
page_size_query_param = 'page_size'
|
|
max_page_size = 1000
|
|
|
|
def get_paginated_response(self, data):
|
|
return Response({
|
|
'count': self.page.paginator.count,
|
|
'next': self.get_next_link(),
|
|
'previous': self.get_previous_link(),
|
|
'results': data,
|
|
'page': self.page.number,
|
|
'pages': self.page.paginator.num_pages,
|
|
'page_size': self.page_size,
|
|
})
|
|
|
|
|
|
class LargeResultsSetPagination(PageNumberPagination):
|
|
"""
|
|
Pagination for large datasets (e.g., transactions).
|
|
"""
|
|
page_size = 100
|
|
page_size_query_param = 'page_size'
|
|
max_page_size = 5000
|
|
|
|
def get_paginated_response(self, data):
|
|
return Response({
|
|
'count': self.page.paginator.count,
|
|
'next': self.get_next_link(),
|
|
'previous': self.get_previous_link(),
|
|
'results': data,
|
|
'page': self.page.number,
|
|
'pages': self.page.paginator.num_pages,
|
|
'page_size': self.page_size,
|
|
})
|
|
|