a
    [g                  
   @  sV  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y Z zeeZ	W Y dZ[nbdZ[0 0 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sResRd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 )&    )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   i/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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 ||i |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  sR   t r@| j  r ||i |S | jt|g|R i |S n||i |S dS )z3Run sync function in greenlet. Support nested callsN)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 r   )r   r   closer   r   r   r   r#   B   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_implementedI   s    r+   c                 C  s   t | t S r   )
isinstance	Exception)er   r   r   r   V   s    r   c                 C  s
   t   d S r   r+   thingr   r   r   r   Y   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
   _   s    r
   c                 O  s
   t   d S r   r/   )r   r   kwr   r   r   r   b   s    r   c                  O  s
   t   d S r   r/   )r   r2   r   r   r   r   e   s    r   c                 O  s   | |i |S r   r   r   argr2   r   r   r   _util_async_runh   s    r5   c                 O  s
   t   d S r   r/   r3   r   r   r   "_util_async_run_coroutine_functionk   s    r6   )
__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>	   sB   !