Skip to content

Commit f8c0740

Browse files
authored
Merge pull request #20528 from netbox-community/02496-max-page
20496 make max_page_size upper bound
2 parents b7cae04 + 4db3d48 commit f8c0740

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

netbox/netbox/api/pagination.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,28 @@ def paginate_queryset(self, queryset, request, view=None):
4444
return list(queryset[self.offset:])
4545

4646
def get_limit(self, request):
47+
max_limit = self.default_limit
48+
MAX_PAGE_SIZE = get_config().MAX_PAGE_SIZE
49+
if MAX_PAGE_SIZE:
50+
max_limit = min(max_limit, MAX_PAGE_SIZE)
51+
4752
if self.limit_query_param:
48-
MAX_PAGE_SIZE = get_config().MAX_PAGE_SIZE
49-
if MAX_PAGE_SIZE:
50-
MAX_PAGE_SIZE = max(MAX_PAGE_SIZE, self.default_limit)
5153
try:
5254
limit = int(request.query_params[self.limit_query_param])
5355
if limit < 0:
5456
raise ValueError()
55-
# Enforce maximum page size, if defined
57+
5658
if MAX_PAGE_SIZE:
57-
return MAX_PAGE_SIZE if limit == 0 else min(limit, MAX_PAGE_SIZE)
58-
return limit
59+
if limit == 0:
60+
max_limit = MAX_PAGE_SIZE
61+
else:
62+
max_limit = min(MAX_PAGE_SIZE, limit)
63+
else:
64+
max_limit = limit
5965
except (KeyError, ValueError):
6066
pass
6167

62-
return self.default_limit
68+
return max_limit
6369

6470
def get_queryset_count(self, queryset):
6571
return queryset.count()

netbox/utilities/tests/test_api.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,14 +149,13 @@ def test_default_page_size(self):
149149
def test_default_page_size_with_small_max_page_size(self):
150150
response = self.client.get(self.url, format='json', **self.header)
151151
page_size = get_config().MAX_PAGE_SIZE
152-
paginate_count = get_config().PAGINATE_COUNT
153152
self.assertLess(page_size, 100, "Default page size not sufficient for data set")
154153

155154
self.assertHttpStatus(response, status.HTTP_200_OK)
156155
self.assertEqual(response.data['count'], 100)
157-
self.assertTrue(response.data['next'].endswith(f'?limit={paginate_count}&offset={paginate_count}'))
156+
self.assertTrue(response.data['next'].endswith(f'?limit={page_size}&offset={page_size}'))
158157
self.assertIsNone(response.data['previous'])
159-
self.assertEqual(len(response.data['results']), paginate_count)
158+
self.assertEqual(len(response.data['results']), page_size)
160159

161160
def test_custom_page_size(self):
162161
response = self.client.get(f'{self.url}?limit=10', format='json', **self.header)

0 commit comments

Comments
 (0)