Skip to content

iscoroutinefunction returns False for wrapper functions with update_wrapper applied #100317

Closed as not planned
@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:

import functools
import inspect

async def fn():
    pass

assert inspect.iscoroutinefunction(fn)

def decorator(fn):
    def wrapper(*args, **kwargs):
        return fn(*args, **kwargs)
    return wrapper

assert not inspect.iscoroutinefunction(decorator(fn))

def signature_preserving_decorator(fn):
    @functools.wraps(fn)
    def wrapper(*args, **kwargs):
        return fn(*args, **kwargs)

    return wrapper

assert inspect.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

    stdlibPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions