2019-04-09 08:30:26 +00:00
|
|
|
from rest_framework.pagination import PageNumberPagination, _positive_int
|
2017-12-12 22:41:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
class FunkwhalePagination(PageNumberPagination):
|
2018-06-09 13:36:16 +00:00
|
|
|
page_size_query_param = "page_size"
|
2019-04-09 08:30:26 +00:00
|
|
|
default_max_page_size = 50
|
|
|
|
default_page_size = None
|
|
|
|
view = None
|
|
|
|
|
|
|
|
def paginate_queryset(self, queryset, request, view=None):
|
|
|
|
self.view = view
|
|
|
|
return super().paginate_queryset(queryset, request, view)
|
|
|
|
|
|
|
|
def get_page_size(self, request):
|
|
|
|
max_page_size = (
|
|
|
|
getattr(self.view, "max_page_size", 0) or self.default_max_page_size
|
|
|
|
)
|
|
|
|
page_size = getattr(self.view, "default_page_size", 0) or max_page_size
|
|
|
|
if self.page_size_query_param:
|
|
|
|
try:
|
|
|
|
return _positive_int(
|
|
|
|
request.query_params[self.page_size_query_param],
|
|
|
|
strict=True,
|
|
|
|
cutoff=max_page_size,
|
|
|
|
)
|
|
|
|
except (KeyError, ValueError):
|
|
|
|
pass
|
|
|
|
|
|
|
|
return page_size
|