Skip to content

iscoroutinefunction returns False for wrapper functions with update_wrapper applied #100317

Description

@jonasBoss

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions