authentik.api.pagination
Pagination which includes total pages and current page
1"""Pagination which includes total pages and current page""" 2 3from drf_spectacular.plumbing import build_object_type 4from rest_framework import pagination 5from rest_framework.response import Response 6 7from authentik.api.v3.schema.pagination import PAGINATION 8 9 10class Pagination(pagination.PageNumberPagination): 11 """Pagination which includes total pages and current page""" 12 13 page_query_param = "page" 14 page_size_query_param = "page_size" 15 16 def get_page_size(self, request): 17 if self.page_size_query_param in request.query_params: 18 page_size = super().get_page_size(request) 19 if page_size is not None: 20 return min(super().get_page_size(request), request.tenant.pagination_max_page_size) 21 return request.tenant.pagination_default_page_size 22 23 def get_paginated_response(self, data): 24 previous_page_number = 0 25 if self.page.has_previous(): 26 previous_page_number = self.page.previous_page_number() 27 next_page_number = 0 28 if self.page.has_next(): 29 next_page_number = self.page.next_page_number() 30 return Response( 31 { 32 "pagination": { 33 "next": next_page_number, 34 "previous": previous_page_number, 35 "count": self.page.paginator.count, 36 "current": self.page.number, 37 "total_pages": self.page.paginator.num_pages, 38 "start_index": self.page.start_index(), 39 "end_index": self.page.end_index(), 40 }, 41 "results": data, 42 } 43 ) 44 45 def get_paginated_response_schema(self, schema): 46 return build_object_type( 47 properties={ 48 "pagination": PAGINATION.ref, 49 "results": schema, 50 }, 51 required=["pagination", "results"], 52 ) 53 54 55class SmallerPagination(Pagination): 56 """Smaller pagination for objects which might require a lot of queries 57 to retrieve all data for.""" 58 59 max_page_size = 10
class
Pagination(rest_framework.pagination.PageNumberPagination):
11class Pagination(pagination.PageNumberPagination): 12 """Pagination which includes total pages and current page""" 13 14 page_query_param = "page" 15 page_size_query_param = "page_size" 16 17 def get_page_size(self, request): 18 if self.page_size_query_param in request.query_params: 19 page_size = super().get_page_size(request) 20 if page_size is not None: 21 return min(super().get_page_size(request), request.tenant.pagination_max_page_size) 22 return request.tenant.pagination_default_page_size 23 24 def get_paginated_response(self, data): 25 previous_page_number = 0 26 if self.page.has_previous(): 27 previous_page_number = self.page.previous_page_number() 28 next_page_number = 0 29 if self.page.has_next(): 30 next_page_number = self.page.next_page_number() 31 return Response( 32 { 33 "pagination": { 34 "next": next_page_number, 35 "previous": previous_page_number, 36 "count": self.page.paginator.count, 37 "current": self.page.number, 38 "total_pages": self.page.paginator.num_pages, 39 "start_index": self.page.start_index(), 40 "end_index": self.page.end_index(), 41 }, 42 "results": data, 43 } 44 ) 45 46 def get_paginated_response_schema(self, schema): 47 return build_object_type( 48 properties={ 49 "pagination": PAGINATION.ref, 50 "results": schema, 51 }, 52 required=["pagination", "results"], 53 )
Pagination which includes total pages and current page
def
get_page_size(self, request):
17 def get_page_size(self, request): 18 if self.page_size_query_param in request.query_params: 19 page_size = super().get_page_size(request) 20 if page_size is not None: 21 return min(super().get_page_size(request), request.tenant.pagination_max_page_size) 22 return request.tenant.pagination_default_page_size
def
get_paginated_response(self, data):
24 def get_paginated_response(self, data): 25 previous_page_number = 0 26 if self.page.has_previous(): 27 previous_page_number = self.page.previous_page_number() 28 next_page_number = 0 29 if self.page.has_next(): 30 next_page_number = self.page.next_page_number() 31 return Response( 32 { 33 "pagination": { 34 "next": next_page_number, 35 "previous": previous_page_number, 36 "count": self.page.paginator.count, 37 "current": self.page.number, 38 "total_pages": self.page.paginator.num_pages, 39 "start_index": self.page.start_index(), 40 "end_index": self.page.end_index(), 41 }, 42 "results": data, 43 } 44 )
56class SmallerPagination(Pagination): 57 """Smaller pagination for objects which might require a lot of queries 58 to retrieve all data for.""" 59 60 max_page_size = 10
Smaller pagination for objects which might require a lot of queries to retrieve all data for.