Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python312/lib64/python3.12/asyncio/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python312/lib64/python3.12/asyncio/coroutines.py
__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 '<empty co_filename>'

    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
Name
Size
Permissions
Options
__pycache__
--
drwxr-xr-x
__init__.py
1.191 KB
-rw-r--r--
__main__.py
3.409 KB
-rw-r--r--
base_events.py
76.726 KB
-rw-r--r--
base_futures.py
1.928 KB
-rw-r--r--
base_subprocess.py
8.661 KB
-rw-r--r--
base_tasks.py
2.609 KB
-rw-r--r--
constants.py
1.38 KB
-rw-r--r--
coroutines.py
3.264 KB
-rw-r--r--
events.py
28.651 KB
-rw-r--r--
exceptions.py
1.711 KB
-rw-r--r--
format_helpers.py
2.348 KB
-rw-r--r--
futures.py
14.004 KB
-rw-r--r--
locks.py
18.55 KB
-rw-r--r--
log.py
0.121 KB
-rw-r--r--
mixins.py
0.47 KB
-rw-r--r--
proactor_events.py
32.715 KB
-rw-r--r--
protocols.py
6.794 KB
-rw-r--r--
queues.py
7.787 KB
-rw-r--r--
runners.py
7.061 KB
-rw-r--r--
selector_events.py
47.199 KB
-rw-r--r--
sslproto.py
31.151 KB
-rw-r--r--
staggered.py
6.911 KB
-rw-r--r--
streams.py
26.972 KB
-rw-r--r--
subprocess.py
7.556 KB
-rw-r--r--
taskgroups.py
9.335 KB
-rw-r--r--
tasks.py
36.486 KB
-rw-r--r--
threads.py
0.771 KB
-rw-r--r--
timeouts.py
5.196 KB
-rw-r--r--
transports.py
10.471 KB
-rw-r--r--
trsock.py
2.417 KB
-rw-r--r--
unix_events.py
51.879 KB
-rw-r--r--
windows_events.py
31.823 KB
-rw-r--r--
windows_utils.py
4.941 KB
-rw-r--r--