diff options
author | Yury Selivanov <yury@magic.io> | 2016-11-15 20:20:34 (GMT) |
---|---|---|
committer | Yury Selivanov <yury@magic.io> | 2016-11-15 20:20:34 (GMT) |
commit | 0ed20cdfb723c68d604eddec0fc66436ce18e9c0 (patch) | |
tree | 6072de95ce4b4e1ba186021bf29bf4ee3d4c25f8 /Lib/asyncio | |
parent | 2f841442354f41f2490cef76e9ba24bfef9dfbea (diff) | |
download | cpython-0ed20cdfb723c68d604eddec0fc66436ce18e9c0.zip cpython-0ed20cdfb723c68d604eddec0fc66436ce18e9c0.tar.gz cpython-0ed20cdfb723c68d604eddec0fc66436ce18e9c0.tar.bz2 |
Issue #28703: Fix asyncio.iscoroutinefunction to handle Mock objects.
Diffstat (limited to 'Lib/asyncio')
-rw-r--r-- | Lib/asyncio/coroutines.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/Lib/asyncio/coroutines.py b/Lib/asyncio/coroutines.py index f46197d..5bdeceb 100644 --- a/Lib/asyncio/coroutines.py +++ b/Lib/asyncio/coroutines.py @@ -33,12 +33,16 @@ _DEBUG = (not sys.flags.ignore_environment and try: _types_coroutine = types.coroutine + _types_CoroutineType = types.CoroutineType except AttributeError: + # Python 3.4 _types_coroutine = None + _types_CoroutineType = None try: _inspect_iscoroutinefunction = inspect.iscoroutinefunction except AttributeError: + # Python 3.4 _inspect_iscoroutinefunction = lambda func: False try: @@ -238,19 +242,27 @@ def coroutine(func): w.__qualname__ = getattr(func, '__qualname__', None) return w - wrapper._is_coroutine = True # For iscoroutinefunction(). + wrapper._is_coroutine = _is_coroutine # For iscoroutinefunction(). return wrapper +# A marker for iscoroutinefunction. +_is_coroutine = object() + + def iscoroutinefunction(func): """Return True if func is a decorated coroutine function.""" - return (getattr(func, '_is_coroutine', False) or + return (getattr(func, '_is_coroutine', None) is _is_coroutine or _inspect_iscoroutinefunction(func)) _COROUTINE_TYPES = (types.GeneratorType, CoroWrapper) if _CoroutineABC is not None: _COROUTINE_TYPES += (_CoroutineABC,) +if _types_CoroutineType is not None: + # Prioritize native coroutine check to speed-up + # asyncio.iscoroutine. + _COROUTINE_TYPES = (_types_CoroutineType,) + _COROUTINE_TYPES def iscoroutine(obj): |