o
     h                  
   @  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sesd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   N/var/www/html/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   
!