mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-02 20:54:42 +03:00
use PageSizePaginationMixin for CursorPagination
tests for custom page_size in CursorPagination
This commit is contained in:
parent
9a5373d41c
commit
30b36a594f
|
@ -487,20 +487,20 @@ class LimitOffsetPagination(BasePagination):
|
||||||
return template.render(context)
|
return template.render(context)
|
||||||
|
|
||||||
|
|
||||||
class CursorPagination(BasePagination):
|
class CursorPagination(BasePageSizePagination):
|
||||||
"""
|
"""
|
||||||
The cursor pagination implementation is neccessarily complex.
|
The cursor pagination implementation is neccessarily complex.
|
||||||
For an overview of the position/offset style we use, see this post:
|
For an overview of the position/offset style we use, see this post:
|
||||||
http://cramer.io/2011/03/08/building-cursors-for-the-disqus-api/
|
http://cramer.io/2011/03/08/building-cursors-for-the-disqus-api/
|
||||||
"""
|
"""
|
||||||
cursor_query_param = 'cursor'
|
cursor_query_param = 'cursor'
|
||||||
page_size = api_settings.PAGE_SIZE
|
|
||||||
invalid_cursor_message = _('Invalid cursor')
|
invalid_cursor_message = _('Invalid cursor')
|
||||||
ordering = '-created'
|
ordering = '-created'
|
||||||
template = 'rest_framework/pagination/previous_and_next.html'
|
template = 'rest_framework/pagination/previous_and_next.html'
|
||||||
|
|
||||||
def paginate_queryset(self, queryset, request, view=None):
|
def paginate_queryset(self, queryset, request, view=None):
|
||||||
if self.page_size is None:
|
self.page_size = self.get_page_size(request)
|
||||||
|
if not self.page_size:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
self.base_url = request.build_absolute_uri()
|
self.base_url = request.build_absolute_uri()
|
||||||
|
|
|
@ -508,6 +508,8 @@ class TestCursorPagination:
|
||||||
|
|
||||||
class ExamplePagination(pagination.CursorPagination):
|
class ExamplePagination(pagination.CursorPagination):
|
||||||
page_size = 5
|
page_size = 5
|
||||||
|
page_size_query_param = 'page_size'
|
||||||
|
max_page_size = 20
|
||||||
ordering = 'created'
|
ordering = 'created'
|
||||||
|
|
||||||
self.pagination = ExamplePagination()
|
self.pagination = ExamplePagination()
|
||||||
|
@ -643,6 +645,24 @@ class TestCursorPagination:
|
||||||
|
|
||||||
assert isinstance(self.pagination.to_html(), type(''))
|
assert isinstance(self.pagination.to_html(), type(''))
|
||||||
|
|
||||||
|
def test_page_size(self):
|
||||||
|
(previous, current, next, previous_url, next_url) = \
|
||||||
|
self.get_pages('/?page_size=10')
|
||||||
|
|
||||||
|
assert previous is None
|
||||||
|
assert current == [1, 1, 1, 1, 1, 1, 2, 3, 4, 4]
|
||||||
|
assert next == [4, 4, 5, 6, 7, 7, 7, 7, 7, 7]
|
||||||
|
assert 'page_size=10' in next_url
|
||||||
|
|
||||||
|
(previous, current, next, previous_url, next_url) = \
|
||||||
|
self.get_pages(next_url.replace('page_size=10', 'page_size=4'))
|
||||||
|
|
||||||
|
assert previous == [2, 3, 4, 4]
|
||||||
|
assert current == [4, 4, 5, 6]
|
||||||
|
assert next == [7, 7, 7, 7]
|
||||||
|
assert 'page_size=4' in previous_url
|
||||||
|
assert 'page_size=4' in next_url
|
||||||
|
|
||||||
|
|
||||||
def test_get_displayed_page_numbers():
|
def test_get_displayed_page_numbers():
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user