Skip to content

iscoroutinefunction returns False for wrapper functions with update_wrapper applied#100317

@jonasBoss

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