
    6i                    l   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
	 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j2                  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)z&asyncio-related concurrency functions.    )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    ^/home/azureuser/techstart-app/venv/lib/python3.12/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_greenlet8   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.closeD   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   K   s8      "#
 	
 	
 	
r   c                $    t        | t               S r   )
isinstance	Exception)es    r   r   r   X   s    a+++r   c                    t                y r   r3   things    r   r	   r	   [       r   c                    | S r   r.   r:   s    r   r
   r
   ^   s    r   c                     t                y r   r9   r.   r   r   r   r   a   r<   r   c                    t                y r   r9   )r   r    kws      r   r   r   d   r<   r   c                     t                y r   r9   )r    r@   s     r   r   r   g   r<   r   c                     | |i |S r   r.   r   argr@   s      r   _util_async_runrE   j   s    3~"~r   c                    t                y r   r9   rC   s      r   "_util_async_run_coroutine_functionrG   m   r<   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 B3!B..B3