
    i#                    R   d dl mZ d dl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 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 ddlmZ ddlmZ ddlmZ ddlmZ  ed          Zej        r G d de          Zd@dZnd dlmZ d dlmZ  e e            d          ZdAd Z G d! d"e          Z  ed#d$%          Z!erdBd)Z"nej"        Z"dCd,Z#dDd-Z$dEd/Z%dEd0Z&d1d2dFd9Z' G d: d;          Z(dGd=Z)eser	ej*        Z+dS  G d> d?          Z+dS )H    )annotationsN)Context)Any)	Awaitable)Callable)	Coroutine)Optional)TYPE_CHECKING)TypeVar)Union   )memoized_property   )exc)py311)Literal)Protocol)Self)	TypeGuard_Tc                  <    e Zd ZU ded<   ded<   ddZddZddZdS )greenletbooldeadzOptional[Context]
gr_contextfnCallable[..., Any]driverc                    d S N selfr   r   s      g/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/sqlalchemy/util/_concurrency_py3k.py__init__zgreenlet.__init__(             argr   returnc                    d S r    r!   )r#   r(   s     r$   throwzgreenlet.throw*       4r'   valuec                    d S r    r!   )r#   r-   s     r$   switchzgreenlet.switch-   r,   r'   Nr   r   r   r   )r(   r   r)   r   )r-   r   r)   r   )__name__
__module____qualname____annotations__r%   r+   r/   r!   r'   r$   r   r   $   s_         


%%%%IIII	 	 	 		 	 	 	 	 	r'   r   r)   c                     d S r    r!   r!   r'   r$   
getcurrentr6   0   r&   r'   )r6   )r   r   eBaseExceptionr   c                z    t          | t                     p%t          | t          j        t          j        f          S r    )
isinstance	ExceptionasyncioTimeoutErrorCancelledError)r7   s    r$   is_exit_exceptionr?   =   s:     !Y''' :	G '"89, , r'   c                  "    e Zd ZU ded<   d	dZdS )
_AsyncIoGreenletr   r   r   r   r   r   c                j    t          j        | ||           || _        t          r|j        | _        d S d S r    )r   r%   r   _has_gr_contextr   r"   s      r$   r%   z_AsyncIoGreenlet.__init__M   s>    $F+++ 	0$/DOOO	0 	0r'   Nr0   )r1   r2   r3   r4   r%   r!   r'   r$   rA   rA   J   s3         JJJ0 0 0 0 0 0r'   rA   _T_coT)	covariant	awaitableAwaitable[_T_co]%TypeGuard[Coroutine[Any, Any, _T_co]]c                    d S r    r!   rF   s    r$   iscoroutinerK   X   s    03r'   Awaitable[Any]Nonec                P    t          |           r|                                  d S d S r    )rK   closerJ   s    r$   _safe_cancel_awaitablerP   `   s4     9  r'   c                 H    t                      } t          | t                    S r    )r6   r:   rA   )currents    r$   in_greenletrS   g   s    llGg/000r'   Awaitable[_T]c                    t                      }t          |t                    s#t          |            t	          j        d          |j                            |           S )zAwaits an async function in a sync method.

    The sync method must be inside a :func:`greenlet_spawn` context.
    :func:`await_only` calls cannot be nested.

    :param awaitable: The coroutine to call.

    zjgreenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place?)r6   r:   rA   rP   r   MissingGreenletr   r/   )rF   rR   s     r$   
await_onlyrW   l   s`     llGg/00 
y)))!=
 
 	
 >  +++r'   c                0   t                      }t          |t                    sZt                      }|                                r#t          |            t          j        d          |                    |           S |j	        
                    |           S )a  Awaits an async function in a sync method.

    The sync method must be inside a :func:`greenlet_spawn` context.
    :func:`await_fallback` calls cannot be nested.

    :param awaitable: The coroutine to call.

    .. deprecated:: 2.0.24 The ``await_fallback()`` function will be removed
       in SQLAlchemy 2.1.  Use :func:`_util.await_only` instead, running the
       function / program / etc. within a top-level greenlet that is set up
       using :func:`_util.greenlet_spawn`.

    zgreenlet_spawn has not been called and asyncio event loop is already running; can't call await_fallback() here. Was IO attempted in an unexpected place?)r6   r:   rA   get_event_loop
is_runningrP   r   rV   run_until_completer   r/   )rF   rR   loops      r$   await_fallbackr]      s      llGg/00 
2?? 	"9---%;  
 &&y111>  +++r'   F)_require_awaitr   Callable[..., _T]argsr   r^   kwargsc               Z  K   t          | t                                }d}	  |j        |i |}|j        sSd}	 | d{V }|                    |          }n+# t          $ r  |j        t          j                     }Y nw xY w|j        S|`n# |`w xY w|r|st          j
        d          |S )aG  Runs a sync function ``fn`` in a new greenlet.

    The sync function can then use :func:`await_only` to wait for async
    functions.

    :param fn: The sync callable to call.
    :param \*args: Positional arguments to pass to the ``fn`` callable.
    :param \*\*kwargs: Keyword arguments to pass to the ``fn`` callable.
    FTNzThe current operation required an async execution but none was detected. This will usually happen when using a non compatible DBAPI driver. Please ensure that an async DBAPI is used.)rA   r6   r/   r   r8   r+   sysexc_infor   r   AwaitRequired)r   r^   r`   ra   contextswitch_occurredresultr-   s           r$   greenlet_spawnri      s     " r:<<00G
 O000, 	/"O
/ % !.. ! 8 8 8 '7	8 , 	/ NNGN 
o 
G
 
 	

 Ms.   B A B %A?<B >A??
B Bc                  6    e Zd Zedd            ZddZdd
ZdS )AsyncAdaptedLockr)   asyncio.Lockc                (    t          j                    S r    )r<   Lockr#   s    r$   mutexzAsyncAdaptedLock.mutex   s     |~~r'   r   c                N    t          | j                                                  S r    )r]   rp   acquirero   s    r$   	__enter__zAsyncAdaptedLock.__enter__   s      dj0022333r'   r(   r   kwrM   c                8    | j                                          d S r    )rp   release)r#   r(   rt   s      r$   __exit__zAsyncAdaptedLock.__exit__   s    
r'   N)r)   rl   r)   r   )r(   r   rt   r   r)   rM   )r1   r2   r3   r   rp   rs   rw   r!   r'   r$   rk   rk      s[           
4 4 4 4
     r'   rk   asyncio.AbstractEventLoopc                     	 t          j                    S # t          $ r Y nw xY wt          j                                                    S )z}vendor asyncio.get_event_loop() for python 3.7 and above.

    Python 3.10 deprecates get_event_loop() as a standalone.

    )r<   get_running_loopRuntimeErrorget_event_loop_policyrY   r!   r'   r$   rY   rY      sS    ')))    (**99;;;s    
""c                  V    e Zd ZU dZded<   ddZddZddZddZddZ	ddZ
ddZdS )_Runnerz#Runner implementation for test onlyz6Union[None, asyncio.AbstractEventLoop, Literal[False]]_loopr)   rM   c                    d | _         d S r    )r   ro   s    r$   r%   z_Runner.__init__   s    DJJJr'   r   c                .    |                                   | S r    )
_lazy_initro   s    r$   rs   z_Runner.__enter__  s    OOKr'   exc_typer   exc_valexc_tbc                .    |                                   d S r    )rO   )r#   r   r   r   s       r$   rw   z_Runner.__exit__  s    JJLLLLLr'   c                   | j         ry	 | j                             | j                                                    | j                                          d| _         d S # | j                                          d| _         w xY wd S )NF)r   r[   shutdown_asyncgensrO   ro   s    r$   rO   z_Runner.close	  s    z ''J11
5577   J$$&&&!&DJJJ J$$&&&!&DJ&&&&' 's   1A "A>ry   c                J    |                                   | j        sJ | j        S )zReturn embedded event loop.)r   r   ro   s    r$   get_loopz_Runner.get_loop  s'    OO:::r'   coroCoroutine[Any, Any, _T]r   c                p    |                                   | j        sJ | j                            |          S r    )r   r   r[   )r#   r   s     r$   runz_Runner.run  s5    OO:::00666r'   c                x    | j         du rt          d          | j         t          j                    | _         d S d S )NFzRunner is closed)r   r|   r<   new_event_loopro   s    r$   r   z_Runner._lazy_init  sB    zU"""#5666z!$355


 "!r'   N)r)   rM   )r)   r   )r   r   r   r   r   r   r)   rM   r)   ry   )r   r   r)   r   )r1   r2   r3   __doc__r4   r%   rs   rw   rO   r   r   r   r!   r'   r$   r   r      s         11EEEE	 	 	 		 	 	 		 	 	 		' 	' 	' 	'	 	 	 		7 	7 	7 	7
	6 	6 	6 	6 	6 	6r'   r   )r)   r   )r7   r8   r)   r   )rF   rG   r)   rH   )rF   rL   r)   rM   rx   )rF   rT   r)   r   )
r   r_   r`   r   r^   r   ra   r   r)   r   r   ),
__future__r   r<   contextvarsr   rc   typingr   r   r   r   r	   r
   r   r   langhelpersr    r   utilr   util.typingr   r   r   r   r   r   r6   hasattrrC   r?   rA   rD   rK   rP   rS   rW   r]   ri   rk   rY   Runnerr   r!   r'   r$   <module>r      sd   # " " " " "        



                                                        * * * * * *             ! ! ! ! ! ! " " " " " "       # # # # # #WT]]	 "
 
 
 
 
8 
 
 
 &%%%% $#####!!!!!! '**,,55   0 0 0 0 0x 0 0 0 	4((( &4 4 4 4 4
 %K   1 1 1 1
, , , ,4, , , ,F !/ / / / / /d        < < < <  ,6 ,6nGGG(6 (6 (6 (6 (6 (6 (6 (6 (6 (6r'   