Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
f2648fef
Commit
f2648fef
authored
Oct 22, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1187 from ross/paginator_def_val
paginator should validate page and provide default
parents
216ac8a5
c36122a7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
87 additions
and
2 deletions
+87
-2
rest_framework/generics.py
+2
-2
rest_framework/tests/test_pagination.py
+85
-0
No files found.
rest_framework/generics.py
View file @
f2648fef
...
@@ -148,8 +148,8 @@ class GenericAPIView(views.APIView):
...
@@ -148,8 +148,8 @@ class GenericAPIView(views.APIView):
page_query_param
=
self
.
request
.
QUERY_PARAMS
.
get
(
self
.
page_kwarg
)
page_query_param
=
self
.
request
.
QUERY_PARAMS
.
get
(
self
.
page_kwarg
)
page
=
page_kwarg
or
page_query_param
or
1
page
=
page_kwarg
or
page_query_param
or
1
try
:
try
:
page_number
=
strict_positive_int
(
page
)
page_number
=
paginator
.
validate_number
(
page
)
except
ValueError
:
except
InvalidPage
:
if
page
==
'last'
:
if
page
==
'last'
:
page_number
=
paginator
.
num_pages
page_number
=
paginator
.
num_pages
else
:
else
:
...
...
rest_framework/tests/test_pagination.py
View file @
f2648fef
...
@@ -430,3 +430,88 @@ class TestCustomPaginationSerializer(TestCase):
...
@@ -430,3 +430,88 @@ class TestCustomPaginationSerializer(TestCase):
'objects'
:
[
'john'
,
'paul'
]
'objects'
:
[
'john'
,
'paul'
]
}
}
self
.
assertEqual
(
serializer
.
data
,
expected
)
self
.
assertEqual
(
serializer
.
data
,
expected
)
class
NonIntegerPage
(
object
):
def
__init__
(
self
,
paginator
,
object_list
,
prev_token
,
token
,
next_token
):
self
.
paginator
=
paginator
self
.
object_list
=
object_list
self
.
prev_token
=
prev_token
self
.
token
=
token
self
.
next_token
=
next_token
def
has_next
(
self
):
return
not
not
self
.
next_token
def
next_page_number
(
self
):
return
self
.
next_token
def
has_previous
(
self
):
return
not
not
self
.
prev_token
def
previous_page_number
(
self
):
return
self
.
prev_token
class
NonIntegerPaginator
(
object
):
def
__init__
(
self
,
object_list
,
per_page
):
self
.
object_list
=
object_list
self
.
per_page
=
per_page
def
count
(
self
):
# pretend like we don't know how many pages we have
return
None
def
page
(
self
,
token
=
None
):
if
token
:
try
:
first
=
self
.
object_list
.
index
(
token
)
except
ValueError
:
first
=
0
else
:
first
=
0
n
=
len
(
self
.
object_list
)
last
=
min
(
first
+
self
.
per_page
,
n
)
prev_token
=
self
.
object_list
[
last
-
(
2
*
self
.
per_page
)]
if
first
else
None
next_token
=
self
.
object_list
[
last
]
if
last
<
n
else
None
return
NonIntegerPage
(
self
,
self
.
object_list
[
first
:
last
],
prev_token
,
token
,
next_token
)
class
TestNonIntegerPagination
(
TestCase
):
def
test_custom_pagination_serializer
(
self
):
objects
=
[
'john'
,
'paul'
,
'george'
,
'ringo'
]
paginator
=
NonIntegerPaginator
(
objects
,
2
)
request
=
APIRequestFactory
()
.
get
(
'/foobar'
)
serializer
=
CustomPaginationSerializer
(
instance
=
paginator
.
page
(),
context
=
{
'request'
:
request
}
)
expected
=
{
'links'
:
{
'next'
:
'http://testserver/foobar?page={0}'
.
format
(
objects
[
2
]),
'prev'
:
None
},
'total_results'
:
None
,
'objects'
:
objects
[:
2
]
}
self
.
assertEqual
(
serializer
.
data
,
expected
)
request
=
APIRequestFactory
()
.
get
(
'/foobar'
)
serializer
=
CustomPaginationSerializer
(
instance
=
paginator
.
page
(
'george'
),
context
=
{
'request'
:
request
}
)
expected
=
{
'links'
:
{
'next'
:
None
,
'prev'
:
'http://testserver/foobar?page={0}'
.
format
(
objects
[
0
]),
},
'total_results'
:
None
,
'objects'
:
objects
[
2
:]
}
self
.
assertEqual
(
serializer
.
data
,
expected
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment