@@ -33,6 +33,13 @@ class Action(models.Model):
33
33
pass
34
34
35
35
36
+ def decorate (fn ):
37
+ def wrapper (self , request , * args , ** kwargs ):
38
+ return fn (self , request , * args , ** kwargs )
39
+ wrapper .__name__ = fn .__name__
40
+ return wrapper
41
+
42
+
36
43
class ActionViewSet (GenericViewSet ):
37
44
queryset = Action .objects .all ()
38
45
@@ -62,6 +69,11 @@ def custom_detail_action(self, request, *args, **kwargs):
62
69
def unresolvable_detail_action (self , request , * args , ** kwargs ):
63
70
raise NotImplementedError
64
71
72
+ @action (detail = False )
73
+ @decorate
74
+ def wrapped (self , request , * args , ** kwargs ):
75
+ raise NotImplementedError
76
+
65
77
66
78
class ActionNamesViewSet (GenericViewSet ):
67
79
@@ -157,6 +169,7 @@ def test_extra_actions(self):
157
169
'detail_action' ,
158
170
'list_action' ,
159
171
'unresolvable_detail_action' ,
172
+ 'wrapped' ,
160
173
]
161
174
162
175
self .assertEqual (actual , expected )
@@ -172,6 +185,7 @@ def test_list_view(self):
172
185
expected = OrderedDict ([
173
186
('Custom list action' , 'http://testserver/api/actions/custom_list_action/' ),
174
187
('List action' , 'http://testserver/api/actions/list_action/' ),
188
+ ('Wrapped' , 'http://testserver/api/actions/wrapped/' ),
175
189
])
176
190
177
191
self .assertEqual (view .get_extra_action_url_map (), expected )
0 commit comments