@@ -182,8 +182,12 @@ def get_view_method_names(view, schema=None) -> List[str]:
182
182
return [
183
183
item for item in dir (view ) if callable (getattr (view , item )) and (
184
184
item in view .http_method_names
185
- or item in schema .method_mapping .values ()
186
- or item == 'list'
185
+ or (
186
+ item in schema .async_method_mapping .values ()
187
+ if view .view_is_async
188
+ else item in schema .method_mapping .values ()
189
+ )
190
+ or item == ('alist' if view .view_is_async else 'list' )
187
191
or hasattr (getattr (view , item ), 'mapping' )
188
192
)
189
193
]
@@ -202,9 +206,14 @@ def isolate_view_method(view, method_name):
202
206
if method_name in view .__dict__ and method .__name__ != 'handler' :
203
207
return method
204
208
205
- @functools .wraps (method )
206
- def wrapped_method (self , request , * args , ** kwargs ):
207
- return method (self , request , * args , ** kwargs )
209
+ if getattr (view , "view_is_async" , False ):
210
+ @functools .wraps (method )
211
+ async def wrapped_method (self , request , * args , ** kwargs ):
212
+ return await method (self , request , * args , ** kwargs )
213
+ else :
214
+ @functools .wraps (method )
215
+ def wrapped_method (self , request , * args , ** kwargs ):
216
+ return method (self , request , * args , ** kwargs )
208
217
209
218
# wraps() will only create a shallow copy of method.__dict__. Updates to "kwargs"
210
219
# via @extend_schema would leak to the original method. Isolate by creating a copy.
0 commit comments