
    [h#                    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      p/var/www/api.easyaligner.net/htdocs/venv_linux/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Zd
dZd	S )_AsyncIoGreenletr   r   Tr   r   r   r   c                \    t          j        | ||           t          r|j        | _        d S d S r    )r   r%   _has_gr_contextr   r"   s      r$   r%   z_AsyncIoGreenlet.__init__O   s7    $F+++ 	0$/DOOO	0 	0r'   Nr0   )r1   r2   r3   r4    __sqlalchemy_greenlet_provider__r%   r!   r'   r$   rA   rA   J   s9         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!   rG   s    r$   iscoroutinerL   Y   s    03r'   Awaitable[Any]Nonec                P    t          |           r|                                  d S d S r    )rL   closerK   s    r$   _safe_cancel_awaitablerQ   a   s4     9  r'   c                 @    t                      } t          | dd          S )NrD   F)r6   getattr)currents    r$   in_greenletrU   h   s    llG7>FFFr'   Awaitable[_T]c                    t                      }t          |dd          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.

    rD   Fzjgreenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place?)r6   rS   rQ   r   MissingGreenletparentr/   )rG   rT   s     r$   
await_onlyrZ   m   sb     llG7>FF 
y)))!=
 
 	
 >  +++r'   c                (   t                      }t          |dd          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`.

    rD   Fzgreenlet_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   rS   get_event_loop
is_runningrQ   r   rX   run_until_completerY   r/   )rG   rT   loops      r$   await_fallbackr`      s      llG7>FF 
2?? 	"9---%;  
 &&y111>  +++r'   F)_require_awaitr   Callable[..., _T]argsr   ra   kwargsc               D  K   t          | t                                }d} |j        |i |}|j        sSd}	 | d{V }|                    |          }n+# t          $ r  |j        t          j                     }Y nw xY w|j        S|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   AwaitRequired)r   ra   rc   rd   contextswitch_occurredresultr-   s           r$   greenlet_spawnrl      s      " r:<<00G
 OW^T,V,,Fl +
	+ !LLLLLLE ^^E**FF  	4 	4 	4 #W]CLNN3FFF		4 l +  
o 
G
 
 	

 Ms   A %A>=A>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`   rs   acquirerr   s    r$   	__enter__zAsyncAdaptedLock.__enter__   s      dj0022333r'   r(   r   kwrN   c                8    | j                                          d S r    )rs   release)r#   r(   rw   s      r$   __exit__zAsyncAdaptedLock.__exit__   s    
r'   N)r)   ro   r)   r   )r(   r   rw   r   r)   rN   )r1   r2   r3   r   rs   rv   rz   r!   r'   r$   rn   rn      s[           
4 4 4 4
     r'   rn   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_policyr\   r!   r'   r$   r\   r\      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)   rN   c                    d | _         d S r    )r   rr   s    r$   r%   z_Runner.__init__   s    DJJJr'   r   c                .    |                                   | S r    )
_lazy_initrr   s    r$   rv   z_Runner.__enter__   s    OOKr'   exc_typer   exc_valexc_tbc                .    |                                   d S r    )rP   )r#   r   r   r   s       r$   rz   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_asyncgensrP   rr   s    r$   rP   z_Runner.close  s    z ''J11
5577   J$$&&&!&DJJJ J$$&&&!&DJ&&&&' 's   1A "A>r|   c                J    |                                   | j        sJ | j        S )zReturn embedded event loop.)r   r   rr   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  s6    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_looprr   s    r$   r   z_Runner._lazy_init  sB    zU"""#5666z!$355


 "!r'   N)r)   rN   )r)   r   )r   r   r   r   r   r   r)   rN   r)   r|   )r   r   r)   r   )r1   r2   r3   __doc__r4   r%   rv   rz   rP   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   )rG   rH   r)   rI   )rG   rM   r)   rN   r{   )rG   rV   r)   r   )
r   rb   rc   r   ra   r   rd   r   r)   r   r   ),
__future__r   r<   contextvarsr   rf   typingr   r   r   r   r	   r
   r   r   langhelpersr    r   utilr   util.typingr   r   r   r   r   r   r6   hasattrrC   r?   rA   rE   rL   rQ   rU   rZ   r`   rl   rn   r\   Runnerr   r!   r'   r$   <module>r      sh   # " " " " "        



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