File: //usr/local/lib/python3.10/dist-packages/sniffio/__pycache__/_impl.cpython-310.pyc
o
���g � @ sn d dl mZ d dlmZ d dlZd dlZeddd�ZG dd� dej�Ze� Z G dd � d e
�Zd
efdd�Z
dS )
� )�
ContextVar)�OptionalN�current_async_library_cvar)�defaultc @ s e Zd ZdZdS )�_ThreadLocalN)�__name__�
__module__�__qualname__�name� r r �8/usr/local/lib/python3.10/dist-packages/sniffio/_impl.pyr s r c @ s e Zd ZdS )�AsyncLibraryNotFoundErrorN)r r r r r r r r
s r
�returnc C s� t j} | dur | S t�� } | dur| S dtjv rCddl}z|j}W n
ty. |j j}Y nw z
|� dur8W dS W n t
yB Y nw dtjv rSddlm} |� rSdS t
d��)ae Detect which async library is currently running.
The following libraries are currently supported:
================ =========== ============================
Library Requires Magic string
================ =========== ============================
**Trio** Trio v0.6+ ``"trio"``
**Curio** - ``"curio"``
**asyncio** ``"asyncio"``
**Trio-asyncio** v0.8.2+ ``"trio"`` or ``"asyncio"``,
depending on current mode
================ =========== ============================
Returns:
A string like ``"trio"``.
Raises:
AsyncLibraryNotFoundError: if called from synchronous context,
or if the current async library was not recognized.
Examples:
.. code-block:: python3
from sniffio import current_async_library
async def generic_sleep(seconds):
library = current_async_library()
if library == "trio":
import trio
await trio.sleep(seconds)
elif library == "asyncio":
import asyncio
await asyncio.sleep(seconds)
# ... and so on ...
else:
raise RuntimeError(f"Unsupported library {library!r}")
N�asyncior �curio)�
curio_runningz.unknown async library, or not in async context)�thread_localr
r �get�sys�modulesr �current_task�AttributeError�Task�RuntimeError�
curio.metar r
)�valuer r r r r r �current_async_library s6 )
�
��
�r )�contextvarsr �typingr r � threadingr �localr r r r
�strr r r r r �<module> s �