[Python-checkins] cpython (3.4): Issue 24004: Support Awaitables (pep 492) in @asyncio.coroutine decorator
yury.selivanov
python-checkins at python.org
Sun May 31 03:02:57 CEST 2015
https://hg.python.org/cpython/rev/b7b73029c825
changeset: 96410:b7b73029c825
branch: 3.4
parent: 96390:943fa0e8b6a4
user: Yury Selivanov <yselivanov at sprymix.com>
date: Sat May 30 21:02:12 2015 -0400
summary:
Issue 24004: Support Awaitables (pep 492) in @asyncio.coroutine decorator
files:
Lib/asyncio/coroutines.py | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/Lib/asyncio/coroutines.py b/Lib/asyncio/coroutines.py
--- a/Lib/asyncio/coroutines.py
+++ b/Lib/asyncio/coroutines.py
@@ -54,9 +54,10 @@
inspect.CO_COROUTINE)
try:
- from collections.abc import Coroutine as CoroutineABC
+ from collections.abc import Coroutine as CoroutineABC, \
+ Awaitable as AwaitableABC
except ImportError:
- CoroutineABC = None
+ CoroutineABC = AwaitableABC = None
# Check for CPython issue #21209
@@ -192,6 +193,16 @@
res = func(*args, **kw)
if isinstance(res, futures.Future) or inspect.isgenerator(res):
res = yield from res
+ elif AwaitableABC is not None:
+ # If 'func' returns an Awaitable (new in 3.5) we
+ # want to run it.
+ try:
+ await_meth = res.__await__
+ except AttributeError:
+ pass
+ else:
+ if isinstance(res, AwaitableABC):
+ res = yield from await_meth()
return res
if not _DEBUG:
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list