mirror of
https://github.com/python/cpython.git
synced 2025-08-26 19:55:24 +00:00
asyncio: Set __qualname__ attribute of CoroWrapper in @coroutine decorator on
Python 3.5 - Drop __slots__ optimization of CoroWrapper to be able to set the __qualname__ attribute. - Add tests on __name__, __qualname__ and __module__ of a coroutine function and coroutine object. - Fix test_tasks when run in debug mode (PYTHONASYNCIODEBUG env var set) on Python 3.3 or 3.4
This commit is contained in:
parent
66dc6b0f53
commit
8d3e02ef5a
2 changed files with 46 additions and 12 deletions
|
@ -32,12 +32,12 @@ from .log import logger
|
|||
_DEBUG = (not sys.flags.ignore_environment
|
||||
and bool(os.environ.get('PYTHONASYNCIODEBUG')))
|
||||
|
||||
_PY35 = (sys.version_info >= (3, 5))
|
||||
|
||||
|
||||
class CoroWrapper:
|
||||
# Wrapper for coroutine in _DEBUG mode.
|
||||
|
||||
__slots__ = ['gen', 'func', '__name__', '__doc__', '__weakref__']
|
||||
|
||||
def __init__(self, gen, func):
|
||||
assert inspect.isgenerator(gen), gen
|
||||
self.gen = gen
|
||||
|
@ -111,8 +111,10 @@ def coroutine(func):
|
|||
@functools.wraps(func)
|
||||
def wrapper(*args, **kwds):
|
||||
w = CoroWrapper(coro(*args, **kwds), func)
|
||||
w.__name__ = coro.__name__
|
||||
w.__doc__ = coro.__doc__
|
||||
w.__name__ = func.__name__
|
||||
if _PY35:
|
||||
w.__qualname__ = func.__qualname__
|
||||
w.__doc__ = func.__doc__
|
||||
return w
|
||||
|
||||
wrapper._is_coroutine = True # For iscoroutinefunction().
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue