authentik.enterprise.search.pagination
1from rest_framework.response import Response 2 3from authentik.api.pagination import Pagination 4from authentik.enterprise.search.ql import AUTOCOMPLETE_SCHEMA, QLSearch 5 6 7class AutocompletePagination(Pagination): 8 9 def paginate_queryset(self, queryset, request, view=None): 10 self.view = view 11 return super().paginate_queryset(queryset, request, view) 12 13 def get_autocomplete(self): 14 schema = QLSearch().get_schema(self.request, self.view) 15 introspections = {} 16 if hasattr(self.view, "get_ql_fields"): 17 from authentik.enterprise.search.schema import AKQLSchemaSerializer 18 19 introspections = AKQLSchemaSerializer().serialize( 20 schema(self.page.paginator.object_list.model) 21 ) 22 return introspections 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 "autocomplete": self.get_autocomplete(), 44 } 45 ) 46 47 def get_paginated_response_schema(self, schema): 48 final_schema = super().get_paginated_response_schema(schema) 49 final_schema["properties"]["autocomplete"] = AUTOCOMPLETE_SCHEMA.ref 50 final_schema["required"].append("autocomplete") 51 return final_schema
8class AutocompletePagination(Pagination): 9 10 def paginate_queryset(self, queryset, request, view=None): 11 self.view = view 12 return super().paginate_queryset(queryset, request, view) 13 14 def get_autocomplete(self): 15 schema = QLSearch().get_schema(self.request, self.view) 16 introspections = {} 17 if hasattr(self.view, "get_ql_fields"): 18 from authentik.enterprise.search.schema import AKQLSchemaSerializer 19 20 introspections = AKQLSchemaSerializer().serialize( 21 schema(self.page.paginator.object_list.model) 22 ) 23 return introspections 24 25 def get_paginated_response(self, data): 26 previous_page_number = 0 27 if self.page.has_previous(): 28 previous_page_number = self.page.previous_page_number() 29 next_page_number = 0 30 if self.page.has_next(): 31 next_page_number = self.page.next_page_number() 32 return Response( 33 { 34 "pagination": { 35 "next": next_page_number, 36 "previous": previous_page_number, 37 "count": self.page.paginator.count, 38 "current": self.page.number, 39 "total_pages": self.page.paginator.num_pages, 40 "start_index": self.page.start_index(), 41 "end_index": self.page.end_index(), 42 }, 43 "results": data, 44 "autocomplete": self.get_autocomplete(), 45 } 46 ) 47 48 def get_paginated_response_schema(self, schema): 49 final_schema = super().get_paginated_response_schema(schema) 50 final_schema["properties"]["autocomplete"] = AUTOCOMPLETE_SCHEMA.ref 51 final_schema["required"].append("autocomplete") 52 return final_schema
Pagination which includes total pages and current page
def
paginate_queryset(self, queryset, request, view=None):
10 def paginate_queryset(self, queryset, request, view=None): 11 self.view = view 12 return super().paginate_queryset(queryset, request, view)
Paginate a queryset if required, either returning a
page object, or None if pagination is not configured for this view.
def
get_autocomplete(self):
14 def get_autocomplete(self): 15 schema = QLSearch().get_schema(self.request, self.view) 16 introspections = {} 17 if hasattr(self.view, "get_ql_fields"): 18 from authentik.enterprise.search.schema import AKQLSchemaSerializer 19 20 introspections = AKQLSchemaSerializer().serialize( 21 schema(self.page.paginator.object_list.model) 22 ) 23 return introspections
def
get_paginated_response(self, data):
25 def get_paginated_response(self, data): 26 previous_page_number = 0 27 if self.page.has_previous(): 28 previous_page_number = self.page.previous_page_number() 29 next_page_number = 0 30 if self.page.has_next(): 31 next_page_number = self.page.next_page_number() 32 return Response( 33 { 34 "pagination": { 35 "next": next_page_number, 36 "previous": previous_page_number, 37 "count": self.page.paginator.count, 38 "current": self.page.number, 39 "total_pages": self.page.paginator.num_pages, 40 "start_index": self.page.start_index(), 41 "end_index": self.page.end_index(), 42 }, 43 "results": data, 44 "autocomplete": self.get_autocomplete(), 45 } 46 )