U
    ]g%i                  
   @  sX  d Z ddlmZ ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ dZ	dZ
zddlZW n* ek
r Z zeeZ
W 5 dZ[X Y nZX d	Z	d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ edZG dd dZejsTe	sTdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& ZdS )'z&asyncio-related concurrency functions.    )annotationsN)Any)Callable)	Coroutine)TypeVarFT   )
await_only)await_fallback)in_greenlet)greenlet_spawn)is_exit_exception)AsyncAdaptedLock)_Runner_Tc                   @  sT   e Zd ZdZddddZddddd	d
dZddddd	ddZddddZdS )
_AsyncUtilz&Asyncio util for test suite/ util onlyNone)returnc                 C  s   t rt | _d S N)have_greenletr   runnerself r   Z/var/www/html/api-medvista/venv/lib/python3.8/site-packages/sqlalchemy/util/concurrency.py__init__+   s    z_AsyncUtil.__init__z&Callable[..., Coroutine[Any, Any, _T]]r   r   )fnargskwargsr   c                 O  s   | j |||S )zRun coroutine on the loop)r   runr   r   r   r   r   r   r   r   /   s    z_AsyncUtil.runzCallable[..., _T]c                 O  sD   t r6| j  r|||S | jt|f||S n
|||S dS )z3Run sync function in greenlet. Support nested callsN)r   r   get_loop
is_runningr   r   r   r   r   r   run_in_greenlet8   s
    
z_AsyncUtil.run_in_greenletc                 C  s   t r| j  d S r   )r   r   closer   r   r   r   r#   D   s    z_AsyncUtil.closeN)__name__
__module____qualname____doc__r   r   r"   r#   r   r   r   r   r   (   s
   	r   c                   C  s    t rd S ttrdt ndd S )Nz9the greenlet library is required to use this function. %s )r   
ValueErrorgreenlet_errorr   r   r   r   _not_implementedK   s    r+   c                 C  s   t | t S r   )
isinstance	Exception)er   r   r   r   X   s    r   c                 C  s
   t   d S r   r+   thingr   r   r   r   [   s    r   c                 C  s   | S r   r   r0   r   r   r   r	   ^   s    r	   c                   C  s
   t   d S r   r/   r   r   r   r   r
   a   s    r
   c                 O  s
   t   d S r   r/   )r   r   kwr   r   r   r   d   s    r   c                  O  s
   t   d S r   r/   )r   r2   r   r   r   r   g   s    r   c                 O  s
   | ||S r   r   r   argr2   r   r   r   _util_async_runj   s    r5   c                 O  s
   t   d S r   r/   r3   r   r   r   "_util_async_run_coroutine_functionm   s    r6   )r'   
__future__r   asynciotypingr   r   r   r   r   r*   ZgreenletImportErrorr.   strZ_concurrency_py3kr   r	   r
   r   r   r   r   r   r   TYPE_CHECKINGr+   r5   r6   r   r   r   r   <module>	   sD   !