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
8beef475
Commit
8beef475
authored
Apr 22, 2015
by
Xavier Ordoquy
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2862 from ticosax/allow-empty-queryset
Prevent empty `queryset`s to raise AssertionError.
parents
fe7cd847
24e94730
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
15 additions
and
2 deletions
+15
-2
rest_framework/permissions.py
+2
-2
tests/test_permissions.py
+13
-0
No files found.
rest_framework/permissions.py
View file @
8beef475
...
@@ -120,9 +120,9 @@ class DjangoModelPermissions(BasePermission):
...
@@ -120,9 +120,9 @@ class DjangoModelPermissions(BasePermission):
if
queryset
is
None
and
getattr
(
view
,
'_ignore_model_permissions'
,
False
):
if
queryset
is
None
and
getattr
(
view
,
'_ignore_model_permissions'
,
False
):
return
True
return
True
assert
queryset
,
(
assert
queryset
is
not
None
,
(
'Cannot apply DjangoModelPermissions on a view that '
'Cannot apply DjangoModelPermissions on a view that '
'does not have `.queryset` property.'
'does not have `.queryset` property
nor redefines `.get_queryset()`
.'
)
)
perms
=
self
.
get_required_permissions
(
request
.
method
,
queryset
.
model
)
perms
=
self
.
get_required_permissions
(
request
.
method
,
queryset
.
model
)
...
...
tests/test_permissions.py
View file @
8beef475
...
@@ -41,9 +41,17 @@ class GetQuerySetListView(generics.ListCreateAPIView):
...
@@ -41,9 +41,17 @@ class GetQuerySetListView(generics.ListCreateAPIView):
return
BasicModel
.
objects
.
all
()
return
BasicModel
.
objects
.
all
()
class
EmptyListView
(
generics
.
ListCreateAPIView
):
queryset
=
BasicModel
.
objects
.
none
()
serializer_class
=
BasicSerializer
authentication_classes
=
[
authentication
.
BasicAuthentication
]
permission_classes
=
[
permissions
.
DjangoModelPermissions
]
root_view
=
RootView
.
as_view
()
root_view
=
RootView
.
as_view
()
instance_view
=
InstanceView
.
as_view
()
instance_view
=
InstanceView
.
as_view
()
get_queryset_list_view
=
GetQuerySetListView
.
as_view
()
get_queryset_list_view
=
GetQuerySetListView
.
as_view
()
empty_list_view
=
EmptyListView
.
as_view
()
def
basic_auth_header
(
username
,
password
):
def
basic_auth_header
(
username
,
password
):
...
@@ -166,6 +174,11 @@ class ModelPermissionsIntegrationTests(TestCase):
...
@@ -166,6 +174,11 @@ class ModelPermissionsIntegrationTests(TestCase):
self
.
assertIn
(
'actions'
,
response
.
data
)
self
.
assertIn
(
'actions'
,
response
.
data
)
self
.
assertEqual
(
list
(
response
.
data
[
'actions'
]
.
keys
()),
[
'PUT'
])
self
.
assertEqual
(
list
(
response
.
data
[
'actions'
]
.
keys
()),
[
'PUT'
])
def
test_empty_view_does_not_assert
(
self
):
request
=
factory
.
get
(
'/1'
,
HTTP_AUTHORIZATION
=
self
.
permitted_credentials
)
response
=
empty_list_view
(
request
,
pk
=
1
)
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_200_OK
)
class
BasicPermModel
(
models
.
Model
):
class
BasicPermModel
(
models
.
Model
):
text
=
models
.
CharField
(
max_length
=
100
)
text
=
models
.
CharField
(
max_length
=
100
)
...
...
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