When decorating a async function with a decorator that uses @functools.wraps or update_wrapper
inspect.iscoroutinefunction returns False.
The following code demonstrates this issue:
importfunctoolsimportinspectasyncdeffn():
passassertinspect.iscoroutinefunction(fn)
defdecorator(fn):
defwrapper(*args, **kwargs):
returnfn(*args, **kwargs)
returnwrapperassertnotinspect.iscoroutinefunction(decorator(fn))
defsignature_preserving_decorator(fn):
@functools.wraps(fn)defwrapper(*args, **kwargs):
returnfn(*args, **kwargs)
returnwrapperassertinspect.iscoroutinefunction(signature_preserving_decorator(fn))
# AssertionError
I would expect the last assert statement to pass
- CPython versions tested on: 3.10.8
- Operating system and architecture: Linux 5.19.17-2-MANJARO x86_64 GNU/Linux
When decorating a
asyncfunction with a decorator that uses@functools.wrapsorupdate_wrapperinspect.iscoroutinefunctionreturns False.The following code demonstrates this issue:
I would expect the last assert statement to pass