/snap/core20/2866/usr/lib/python3.8/asyncio
NameSizeModeActions
__pycache__/-0755rm
base_events.py726210644editdlrm
base_futures.py25740644editdlrm
base_subprocess.py88430644editdlrm
base_tasks.py24670644editdlrm
constants.py8880644editdlrm
coroutines.py87970644editdlrm
events.py261640644editdlrm
exceptions.py16330644editdlrm
format_helpers.py24040644editdlrm
futures.py131540644editdlrm
locks.py172760644editdlrm
log.py1240644editdlrm
proactor_events.py320600644editdlrm
protocols.py71360644editdlrm
queues.py82230644editdlrm
runners.py20540644editdlrm
selector_events.py389960644editdlrm
sslproto.py272100644editdlrm
staggered.py59920644editdlrm
streams.py266560644editdlrm
subprocess.py80680644editdlrm
tasks.py339230644editdlrm
transports.py104860644editdlrm
trsock.py58760644editdlrm
unix_events.py491150644editdlrm
windows_events.py328730644editdlrm
windows_utils.py50600644editdlrm
__init__.py12270644editdlrm
__main__.py33430644editdlrm
Edit: /snap/core20/2866/usr/lib/python3.8/asyncio/base_futures.py (2574B)
__all__ = () import reprlib from _thread import get_ident from . import format_helpers # States for Future. _PENDING = 'PENDING' _CANCELLED = 'CANCELLED' _FINISHED = 'FINISHED' def isfuture(obj): """Check for a Future. This returns True when obj is a Future instance or is advertising itself as duck-type compatible by setting _asyncio_future_blocking. See comment in Future for more details. """ return (hasattr(obj.__class__, '_asyncio_future_blocking') and obj._asyncio_future_blocking is not None) def _format_callbacks(cb): """helper function for Future.__repr__""" size = len(cb) if not size: cb = '' def format_cb(callback): return format_helpers._format_callback_source(callback, ()) if size == 1: cb = format_cb(cb[0][0]) elif size == 2: cb = '{}, {}'.format(format_cb(cb[0][0]), format_cb(cb[1][0])) elif size > 2: cb = '{}, <{} more>, {}'.format(format_cb(cb[0][0]), size - 2, format_cb(cb[-1][0])) return f'cb=[{cb}]' # bpo-42183: _repr_running is needed for repr protection # when a Future or Task result contains itself directly or indirectly. # The logic is borrowed from @reprlib.recursive_repr decorator. # Unfortunately, the direct decorator usage is impossible because of # AttributeError: '_asyncio.Task' object has no attribute '__module__' error. # # After fixing this thing we can return to the decorator based approach. _repr_running = set() def _future_repr_info(future): # (Future) -> str """helper function for Future.__repr__""" info = [future._state.lower()] if future._state == _FINISHED: if future._exception is not None: info.append(f'exception={future._exception!r}') else: key = id(future), get_ident() if key in _repr_running: result = '...' else: _repr_running.add(key) try: # use reprlib to limit the length of the output, especially # for very long strings result = reprlib.repr(future._result) finally: _repr_running.discard(key) info.append(f'result={result}') if future._callbacks: info.append(_format_callbacks(future._callbacks)) if future._source_traceback: frame = future._source_traceback[-1] info.append(f'created at {frame[0]}:{frame[1]}') return info