From 8fe11180a1a59f6e8e5a4441b21a3d9831f0b69d Mon Sep 17 00:00:00 2001 From: Andrew Donnellan Date: Tue, 24 Jul 2018 15:10:51 +1000 Subject: [PATCH] REST: Add new setting for maximum API page size In 41790caf59ad ("REST: Limit max page size") we limited the maximum page size to the default page size in the settings. This turns out to be rather restrictive, as we usually want to keep the default page size low, but an administrator may want to allow API clients to fetch more than that per request. Add a new setting, MAX_REST_RESULTS_PER_PAGE, to set the maximum page size. Closes: #202 ("Separate max API page size and default API page size into different settings") Suggested-by: Stewart Smith Suggested-by: Joel Stanley Signed-off-by: Andrew Donnellan [dja: set to 250 as per mailing list discussion] Signed-off-by: Daniel Axtens --- docs/deployment/configuration.rst | 8 +++++++- patchwork/api/base.py | 3 ++- patchwork/settings/base.py | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/deployment/configuration.rst b/docs/deployment/configuration.rst index 34748563..e599522a 100644 --- a/docs/deployment/configuration.rst +++ b/docs/deployment/configuration.rst @@ -88,7 +88,13 @@ Enable the :doc:`REST API <../api/rest>`. The number of items to include in REST API responses by default. This can be overridden by the ``per_page`` parameter for some endpoints. -.. versionadded:: 2.0 +``MAX_REST_RESULTS_PER_PAGE`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The maximum number of items that can be requested in a REST API request using +the ``per_page`` parameter. + +.. versionadded:: 2.2 ``COMPAT_REDIR`` ~~~~~~~~~~~~~~~~ diff --git a/patchwork/api/base.py b/patchwork/api/base.py index 8c38d5a1..bf452f78 100644 --- a/patchwork/api/base.py +++ b/patchwork/api/base.py @@ -36,7 +36,8 @@ class LinkHeaderPagination(PageNumberPagination): https://tools.ietf.org/html/rfc5988#section-5 https://developer.github.com/guides/traversing-with-pagination """ - page_size = max_page_size = settings.REST_RESULTS_PER_PAGE + page_size = settings.REST_RESULTS_PER_PAGE + max_page_size = settings.MAX_REST_RESULTS_PER_PAGE page_size_query_param = 'per_page' def get_paginated_response(self, data): diff --git a/patchwork/settings/base.py b/patchwork/settings/base.py index acfb0164..16ca712a 100644 --- a/patchwork/settings/base.py +++ b/patchwork/settings/base.py @@ -212,6 +212,7 @@ ENABLE_XMLRPC = False ENABLE_REST_API = True REST_RESULTS_PER_PAGE = 30 +MAX_REST_RESULTS_PER_PAGE = 250 # Set to True to enable redirections or URLs from previous versions # of patchwork -- 2.47.3