Skip to content

Commit 0e5d26f

Browse files
committed
Fixed encode#5228 Set ViewSet args/kwargs/request before dispatch
1 parent 506ec85 commit 0e5d26f

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

rest_framework/viewsets.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ def view(request, *args, **kwargs):
8282
if hasattr(self, 'get') and not hasattr(self, 'head'):
8383
self.head = self.get
8484

85+
self.request = request
86+
self.args = args
87+
self.kwargs = kwargs
88+
8589
# And continue as usual
8690
return self.dispatch(request, *args, **kwargs)
8791

tests/test_viewsets.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ def list(self, request, *args, **kwargs):
1313
return Response({'ACTION': 'LIST'})
1414

1515

16+
class InstanceViewSet(GenericViewSet):
17+
18+
def dispatch(self, request, *args, **kwargs):
19+
return self.dummy(request, *args, **kwargs)
20+
21+
def dummy(self, request, *args, **kwargs):
22+
return Response({'view': self})
23+
24+
1625
class InitializeViewSetsTestCase(TestCase):
1726
def test_initialize_view_set_with_actions(self):
1827
request = factory.get('/', '', content_type='application/json')
@@ -42,3 +51,17 @@ def test_initialize_view_set_with_empty_actions(self):
4251
"For example `.as_view({'get': 'list'})`")
4352
else:
4453
self.fail("actions must not be empty.")
54+
55+
def test_args_kwargs_request_action_map_on_self(self):
56+
"""
57+
Test a view only has args, kwargs, request, action_map
58+
once `as_view` has been called.
59+
"""
60+
bare_view = InstanceViewSet()
61+
view = InstanceViewSet.as_view(actions={
62+
'get': 'dummy',
63+
})(factory.get('/')).data['view']
64+
65+
for attribute in ('args', 'kwargs', 'request', 'action_map'):
66+
self.assertNotIn(attribute, dir(bare_view))
67+
self.assertIn(attribute, dir(view))

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy