o
    èã¤gè  ã                
   @  sZ  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yF Z z
eeƒZ	W Y dZ[n1dZ[ww 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s©es«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$d%„ ZdS dS dS )&é    )ÚannotationsN)ÚAny)ÚCallable)Ú	Coroutine)ÚTypeVarFTé   )Ú
await_only)Úawait_fallback)Úin_greenlet)Úgreenlet_spawn)Úis_exit_exception)ÚAsyncAdaptedLock)Ú_RunnerÚ_Tc                   @  s8   e Zd ZdZddd„Zddd„Zddd„Zddd„ZdS )Ú
_AsyncUtilz&Asyncio util for test suite/ util onlyÚreturnÚNonec                 C  s   t rtƒ | _d S d S ©N)Úhave_greenletr   Úrunner©Úself© r   ú]/var/www/html/ecg_monitoring/venv/lib/python3.10/site-packages/sqlalchemy/util/concurrency.pyÚ__init__)   s   ÿz_AsyncUtil.__init__Úfnú&Callable[..., Coroutine[Any, Any, _T]]Úargsr   Úkwargsr   c                 O  s   | j  ||i |¤Ž¡S )zRun coroutine on the loop)r   Úrun©r   r   r   r   r   r   r   r   -   s   z_AsyncUtil.runúCallable[..., _T]c                 O  sL   t r| j ¡  ¡ r||i |¤ŽS | j t|g|¢R i |¤Ž¡S ||i |¤ŽS )z3Run sync function in greenlet. Support nested calls)r   r   Úget_loopÚ
is_runningr   r   r    r   r   r   Úrun_in_greenlet6   s
   z_AsyncUtil.run_in_greenletc                 C  s   t r	| j ¡  d S d S r   )r   r   Úcloser   r   r   r   r%   B   s   ÿz_AsyncUtil.closeN)r   r   )r   r   r   r   r   r   r   r   )r   r!   r   r   r   r   r   r   )Ú__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 ƒ‚dƒ‚)Nz9the greenlet library is required to use this function. %sÚ )r   Ú
ValueErrorÚgreenlet_errorr   r   r   r   Ú_not_implementedI   s   þÿÿür-   c                 C  s   t | tƒ S r   )Ú
isinstanceÚ	Exception)Úer   r   r   r   V   s   r   c                 C  ó
   t ƒ  d S r   ©r-   ©Úthingr   r   r   r   Y   ó   
r   c                 C  s   | S r   r   r3   r   r   r   r	   \   s   r	   c                   C  r1   r   r2   r   r   r   r   r
   _   r5   r
   c                 O  r1   r   r2   )r   r   Úkwr   r   r   r   b   r5   r   c                  O  r1   r   r2   )r   r6   r   r   r   r   e   r5   r   c                 O  s   | |i |¤ŽS r   r   ©r   Úargr6   r   r   r   Ú_util_async_runh   s   r9   c                 O  r1   r   r2   r7   r   r   r   Ú"_util_async_run_coroutine_functionk   r5   r:   )Ú
__future__r   ÚasyncioÚtypingr   r   r   r   r   r,   ÚgreenletÚImportErrorr0   ÚstrÚ_concurrency_py3kr   r	   r
   r   r   r   r   r   r   ÚTYPE_CHECKINGr-   r9   r:   r   r   r   r   Ú<module>   sJ   €þ
!Ü