From 1f0a3434dd8b7013dc6deb29e41c11f7b605b30a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Thu, 24 May 2018 23:06:03 +0000 Subject: [PATCH] Limit to 10000 results per_page --- api/pagination.py | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/api/pagination.py b/api/pagination.py index a6a6adcb..2fc0aaf7 100644 --- a/api/pagination.py +++ b/api/pagination.py @@ -1,31 +1,4 @@ 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): @@ -34,13 +7,13 @@ class PageSizedPagination(pagination.PageNumberPagination): """ page_size_query_param = 'page_size' all_pages_strings = ('all',) - django_paginator_class = AllowNegativePaginator + max_page_size = 10000 def get_page_size(self, request): try: page_size_str = request.query_params[self.page_size_query_param] if page_size_str in self.all_pages_strings: - return -1 + return self.max_page_size except KeyError: pass