From 862bfad71da177cac02aac6d016b9734690120c2 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 3 Jun 2021 11:08:02 +0200 Subject: [PATCH] api: add page size parameter to user's API (#54514) The query param is named `limit`. --- src/authentic2/api_views.py | 7 ++++++- tests/test_api.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/authentic2/api_views.py b/src/authentic2/api_views.py index ed28fd9b..121a4393 100644 --- a/src/authentic2/api_views.py +++ b/src/authentic2/api_views.py @@ -717,6 +717,11 @@ class FreeTextSearchFilter(BaseFilterBackend): return queryset +class UsersAPIPagination(pagination.CursorPagination): + page_size_query_param = 'limit' + max_page_size = 100 + + class UsersAPI(api_mixins.GetOrCreateMixinView, HookMixin, ExceptionHandlerMixin, ModelViewSet): queryset = User.objects.all() ordering_fields = ['username', 'first_name', 'last_name', 'modified', 'date_joined'] @@ -730,7 +735,7 @@ class UsersAPI(api_mixins.GetOrCreateMixinView, HookMixin, ExceptionHandlerMixin filter_class = UsersFilter filterset_class = UsersFilter filter_backends = [FreeTextSearchFilter] + api_settings.DEFAULT_FILTER_BACKENDS - pagination_class = pagination.CursorPagination + pagination_class = UsersAPIPagination @property def ordering(self): diff --git a/tests/test_api.py b/tests/test_api.py index d6939eb9..1ca376be 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -2544,3 +2544,15 @@ def test_find_duplicates_put(app, admin, settings): app.put_json( '/api/users/find_duplicates/', params={'first_name': 'Eleonore', 'last_name': 'aeiou'}, status=405 ) + + +def test_users_page_size(app, admin): + app.authorization = ('Basic', (admin.username, admin.username)) + + User.objects.create() + + resp = app.get('/api/users/') + assert len(resp.json['results']) == 2 + + resp = app.get('/api/users/?limit=1') + assert len(resp.json['results']) == 1 -- 2.32.0.rc0