summaryrefslogtreecommitdiffstats
path: root/Lib/types.py
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@sprymix.com>2015-07-03 17:11:35 (GMT)
committerYury Selivanov <yselivanov@sprymix.com>2015-07-03 17:11:35 (GMT)
commitfdbeb2b4b67e1e44c96127a06cf1bdf878f4f7ca (patch)
tree249f7190feeef1e18f5c88b5987f6e632193df33 /Lib/types.py
parent2ab5b092e5a82390c236708b7c163a32dfc928a1 (diff)
downloadcpython-fdbeb2b4b67e1e44c96127a06cf1bdf878f4f7ca.zip
cpython-fdbeb2b4b67e1e44c96127a06cf1bdf878f4f7ca.tar.gz
cpython-fdbeb2b4b67e1e44c96127a06cf1bdf878f4f7ca.tar.bz2
Issue #24400: Resurrect inspect.isawaitable()
collections.abc.Awaitable and collections.abc.Coroutine no longer use __instancecheck__ hook to detect generator-based coroutines. inspect.isawaitable() can be used to detect generator-based coroutines and to distinguish them from regular generator objects.
Diffstat (limited to 'Lib/types.py')
-rw-r--r--Lib/types.py10
1 files changed, 5 insertions, 5 deletions
diff --git a/Lib/types.py b/Lib/types.py
index 8c5fc65..48891cd 100644
--- a/Lib/types.py
+++ b/Lib/types.py
@@ -241,12 +241,12 @@ def coroutine(func):
@_functools.wraps(func)
def wrapped(*args, **kwargs):
coro = func(*args, **kwargs)
- if coro.__class__ is CoroutineType:
- # 'coro' is a native coroutine object.
+ if (coro.__class__ is CoroutineType or
+ coro.__class__ is GeneratorType and coro.gi_code.co_flags & 0x100):
+ # 'coro' is a native coroutine object or an iterable coroutine
return coro
- if (coro.__class__ is GeneratorType or
- (isinstance(coro, _collections_abc.Generator) and
- not isinstance(coro, _collections_abc.Coroutine))):
+ if (isinstance(coro, _collections_abc.Generator) and
+ not isinstance(coro, _collections_abc.Coroutine)):
# 'coro' is either a pure Python generator iterator, or it
# implements collections.abc.Generator (and does not implement
# collections.abc.Coroutine).