8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-26 22:52:26 +00:00

Limit to 10000 results per_page

This commit is contained in:
Maël Kervella 2018-05-24 23:06:03 +00:00
parent 37458db314
commit 1f0a3434dd

View file

@ -1,31 +1,4 @@
from rest_framework import pagination from rest_framework import pagination
from django.core import paginator
from django.utils.functional import cached_property
class AllowNegativePaginator(paginator.Paginator):
"""
Paginator subclass to allow negative or null `per_page` argument,
meaning to show all items in one page.
"""
def page(self, number):
"""
Bypass the default page creation to render all items if `per_page`
argument is negative or null.
"""
if self.per_page <= 0:
return self._get_page(self.object_list, 1, self)
return super(AllowNegativePaginator, self).page(number)
@cached_property
def num_pages(self):
"""
Bypass the default number of page to return 1 if `per_page` argument
is negative or null.
"""
if self.per_page <= 0:
return 1
return super(AllowNegativePaginator, self).num_pages
class PageSizedPagination(pagination.PageNumberPagination): class PageSizedPagination(pagination.PageNumberPagination):
@ -34,13 +7,13 @@ class PageSizedPagination(pagination.PageNumberPagination):
""" """
page_size_query_param = 'page_size' page_size_query_param = 'page_size'
all_pages_strings = ('all',) all_pages_strings = ('all',)
django_paginator_class = AllowNegativePaginator max_page_size = 10000
def get_page_size(self, request): def get_page_size(self, request):
try: try:
page_size_str = request.query_params[self.page_size_query_param] page_size_str = request.query_params[self.page_size_query_param]
if page_size_str in self.all_pages_strings: if page_size_str in self.all_pages_strings:
return -1 return self.max_page_size
except KeyError: except KeyError:
pass pass