30 lines
		
	
	
		
			979 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			979 B
		
	
	
	
		
			Python
		
	
	
	
from rest_framework.pagination import PageNumberPagination, _positive_int
 | 
						|
 | 
						|
 | 
						|
class FunkwhalePagination(PageNumberPagination):
 | 
						|
    page_size_query_param = "page_size"
 | 
						|
    default_max_page_size = 50
 | 
						|
    default_page_size = None
 | 
						|
    view = None
 | 
						|
 | 
						|
    def paginate_queryset(self, queryset, request, view=None):
 | 
						|
        self.view = view
 | 
						|
        return super().paginate_queryset(queryset, request, view)
 | 
						|
 | 
						|
    def get_page_size(self, request):
 | 
						|
        max_page_size = (
 | 
						|
            getattr(self.view, "max_page_size", 0) or self.default_max_page_size
 | 
						|
        )
 | 
						|
        page_size = getattr(self.view, "default_page_size", 0) or max_page_size
 | 
						|
        if self.page_size_query_param:
 | 
						|
            try:
 | 
						|
                return _positive_int(
 | 
						|
                    request.query_params[self.page_size_query_param],
 | 
						|
                    strict=True,
 | 
						|
                    cutoff=max_page_size,
 | 
						|
                )
 | 
						|
            except (KeyError, ValueError):
 | 
						|
                pass
 | 
						|
 | 
						|
        return page_size
 |