/usr/lib64/python3.12/asyncio
NameSizeModeActions
__pycache__/-0755rm
base_events.py785670644editdlrm
base_futures.py19740644editdlrm
base_subprocess.py88690644editdlrm
base_tasks.py26720644editdlrm
constants.py14130644editdlrm
coroutines.py33420644editdlrm
events.py293390644editdlrm
exceptions.py17520644editdlrm
format_helpers.py24040644editdlrm
futures.py143400644editdlrm
locks.py189950644editdlrm
log.py1240644editdlrm
mixins.py4810644editdlrm
proactor_events.py335000644editdlrm
protocols.py69570644editdlrm
queues.py79740644editdlrm
runners.py72300644editdlrm
selector_events.py483320644editdlrm
sslproto.py318990644editdlrm
staggered.py70770644editdlrm
streams.py276190644editdlrm
subprocess.py77370644editdlrm
taskgroups.py95590644editdlrm
tasks.py373620644editdlrm
threads.py7900644editdlrm
timeouts.py53210644editdlrm
transports.py107220644editdlrm
trsock.py24750644editdlrm
unix_events.py531240644editdlrm
windows_events.py325870644editdlrm
windows_utils.py50600644editdlrm
__init__.py12200644editdlrm
__main__.py34910644editdlrm
Edit: /usr/lib64/python3.12/asyncio/coroutines.py (3342B)
__all__ = 'iscoroutinefunction', 'iscoroutine' import collections.abc import inspect import os import sys import types def _is_debug_mode(): # See: https://docs.python.org/3/library/asyncio-dev.html#asyncio-debug-mode. return sys.flags.dev_mode or (not sys.flags.ignore_environment and bool(os.environ.get('PYTHONASYNCIODEBUG'))) # A marker for iscoroutinefunction. _is_coroutine = object() def iscoroutinefunction(func): """Return True if func is a decorated coroutine function.""" return (inspect.iscoroutinefunction(func) or getattr(func, '_is_coroutine', None) is _is_coroutine) # Prioritize native coroutine check to speed-up # asyncio.iscoroutine. _COROUTINE_TYPES = (types.CoroutineType, collections.abc.Coroutine) _iscoroutine_typecache = set() def iscoroutine(obj): """Return True if obj is a coroutine object.""" if type(obj) in _iscoroutine_typecache: return True if isinstance(obj, _COROUTINE_TYPES): # Just in case we don't want to cache more than 100 # positive types. That shouldn't ever happen, unless # someone stressing the system on purpose. if len(_iscoroutine_typecache) < 100: _iscoroutine_typecache.add(type(obj)) return True else: return False def _format_coroutine(coro): assert iscoroutine(coro) def get_name(coro): # Coroutines compiled with Cython sometimes don't have # proper __qualname__ or __name__. While that is a bug # in Cython, asyncio shouldn't crash with an AttributeError # in its __repr__ functions. if hasattr(coro, '__qualname__') and coro.__qualname__: coro_name = coro.__qualname__ elif hasattr(coro, '__name__') and coro.__name__: coro_name = coro.__name__ else: # Stop masking Cython bugs, expose them in a friendly way. coro_name = f'<{type(coro).__name__} without __name__>' return f'{coro_name}()' def is_running(coro): try: return coro.cr_running except AttributeError: try: return coro.gi_running except AttributeError: return False coro_code = None if hasattr(coro, 'cr_code') and coro.cr_code: coro_code = coro.cr_code elif hasattr(coro, 'gi_code') and coro.gi_code: coro_code = coro.gi_code coro_name = get_name(coro) if not coro_code: # Built-in types might not have __qualname__ or __name__. if is_running(coro): return f'{coro_name} running' else: return coro_name coro_frame = None if hasattr(coro, 'gi_frame') and coro.gi_frame: coro_frame = coro.gi_frame elif hasattr(coro, 'cr_frame') and coro.cr_frame: coro_frame = coro.cr_frame # If Cython's coroutine has a fake code object without proper # co_filename -- expose that. filename = coro_code.co_filename or '' lineno = 0 if coro_frame is not None: lineno = coro_frame.f_lineno coro_repr = f'{coro_name} running at {filename}:{lineno}' else: lineno = coro_code.co_firstlineno coro_repr = f'{coro_name} done, defined at {filename}:{lineno}' return coro_repr