
     f                         d dl mZ d dlmZ d dlZd dlZ edd          Z G d dej                  Z e            Z	 G d d	e
          Zd
efdZdS )    )
ContextVar)OptionalNcurrent_async_library_cvar)defaultc                       e Zd ZdZdS )_ThreadLocalN)__name__
__module____qualname__name     P/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/sniffio/_impl.pyr   r      s         DDDr   r   c                       e Zd ZdS )AsyncLibraryNotFoundErrorN)r	   r
   r   r   r   r   r   r      s        Dr   r   returnc                  d   t           j        } | | S t                                          } | | S dt          j        v rGddl}	 |j        }n# t          $ r |j	        j        }Y nw xY w	  |            dS n# t          $ r Y nw xY wdt          j        v rddlm}  |            rdS 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   s       r   current_async_libraryr!      s   R E&**,,E CK	5"/LL 	5 	5 	5"<4LLL	5	|~~) y * 	 	 	D	 #+,,,,,,=?? 	7
#8  s$   A	 	A"!A"&
A3 3
B ?B )contextvarsr   typingr   r   	threadingr   localr   r   r   r   strr!   r   r   r   <module>r'      s    " " " " " "       



    'Z $   
    9?    |~~	 	 	 	 	 	 	 	Fs F F F F F Fr   