
    hT                    h   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		 d dl
Z
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      Zej0                  sesd Zd Zd Zd Zd Zd Zd Zd Zd Zyyy# e$ rZ ee      Z	Y dZ[PdZ[ww xY w)    )annotationsN)Any)Callable)	Coroutine)TypeVarFT   )
await_only)await_fallback)in_greenlet)greenlet_spawn)is_exit_exception)AsyncAdaptedLock)_Runner_Tc                  P    e Zd ZdZddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 d	dZddZy)

_AsyncUtilz&Asyncio util for test suite/ util onlyc                0    t         rt               | _        y y N)have_greenletr   runnerselfs    DD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/util/concurrency.py__init__z_AsyncUtil.__init__)   s    !)DK     c                D    | j                   j                   ||i |      S )zRun coroutine on the loop)r   runr   fnargskwargss       r   r   z_AsyncUtil.run-   s!     {{r426233r   c                    t         rX| j                  j                         j                         r ||i |S | j                  j	                  t        |g|i |      S  ||i |S )z3Run sync function in greenlet. Support nested calls)r   r   get_loop
is_runningr   r   r   s       r   run_in_greenletz_AsyncUtil.run_in_greenlet6   sb     {{##%0024*6**{{~b'J4'J6'JKKt&v&&r   c                F    t         r| j                  j                          y y r   )r   r   closer   s    r   r'   z_AsyncUtil.closeB   s    KK r   N)returnNone)r   z&Callable[..., Coroutine[Any, Any, _T]]r    r   r!   r   r(   r   )r   zCallable[..., _T]r    r   r!   r   r(   r   )__name__
__module____qualname____doc__r   r   r%   r'    r   r   r   r   &   s_    0$424 4 	4
 
4
'#
',/
';>
'	
' r   r   c                 L    t         ry t        t        rdt        z        d      )Nz9the greenlet library is required to use this function. %s )r   
ValueErrorgreenlet_errorr.   r   r   _not_implementedr3   I   s8      "#
 	
 	
 	
r   c                $    t        | t               S r   )
isinstance	Exception)es    r   r   r   V   s    a+++r   c                    t                y r   r3   things    r   r	   r	   Y       r   c                    | S r   r.   r:   s    r   r
   r
   \   s    r   c                     t                y r   r9   r.   r   r   r   r   _   r<   r   c                    t                y r   r9   )r   r    kws      r   r   r   b   r<   r   c                     t                y r   r9   )r    r@   s     r   r   r   e   r<   r   c                     | |i |S r   r.   r   argr@   s      r   _util_async_runrE   h   s    3~"~r   c                    t                y r   r9   rC   s      r   "_util_async_run_coroutine_functionrG   k   r<   r   )
__future__r   asynciotypingr   r   r   r   r   r2   greenlet_concurrency_py3kr	   r
   r   r   r   r   r   ImportErrorr7   strr   r   TYPE_CHECKINGr3   rE   rG   r.   r   r   <module>rP      s    #      +
 M;C=CIG*T]   B M
,I %2c  	VN	s   B B1B,,B1