Ë
    r™ãj‘"  ã                  óˆ  — d 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  ed«      Zd$d„ZdZd%d„Z G d„ d«      Z e«       Zer edd¬«      Z	 	 	 	 d&d„Znej2                  Zd'd„Zd(d„Zd)d„ZeZddœ	 	 	 	 	 	 	 	 	 d*d„Z G d „ d!«      Z G d"„ d#«      Z y)+z&asyncio-related concurrency functions.é    )ÚannotationsN)ÚAny)Ú	Awaitable)ÚCallable)Ú	Coroutine)ÚNoReturn)ÚTYPE_CHECKING)Ú	TypeGuard)ÚTypeVaré   )Úmemoized_propertyé   )ÚexcÚ_Tc                ó|   — t        | t        «       xs* t        | t        j                  t        j                  f«      S ©N)Ú
isinstanceÚ	ExceptionÚasyncioÚTimeoutErrorÚCancelledError)Úes    úf/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/util/concurrency.pyÚis_exit_exceptionr      s8   € ô ˜!œYÓ'Ð'ò ¬:Ø	ŒG× Ñ ¤'×"8Ñ"8Ð9ó,ð ó    zÚThe SQLAlchemy asyncio module requires that the Python 'greenlet' library is installed.  In order to ensure this dependency is available, use the 'sqlalchemy[asyncio]' install target:  'pip install sqlalchemy[asyncio]'c                 ó    — t        t        «      ‚r   )ÚImportErrorÚ_ERROR_MESSAGE)ÚargÚkws     r   Ú_not_implementedr!   .   s   € Ü
”nÓ
%Ð%r   c                  ó0   — e Zd ZdZdZddœd	d„Zd„ Zd
d„Zy)Ú_concurrency_shim_clszLate import shim for greenlet)Ú_has_greenletÚgreenletÚ_AsyncIoGreenletÚ
getcurrentT©Úraise_c               óh  — dt        «       v ryt        s 	 ddlma ddlma d| _        t        t        «       d«      a G d„ d	t        «      at        | _        t        | _        t        | _        y# t        $ r;}t        sdad
| _        | j                  «        |rt        t        «      |‚Y d}~yd}~ww xY w)z(Import greenlet and initialize the classr%   Nr   )r'   )r%   TÚ
gr_contextc                  ó$   — e Zd ZU ded<   dZdd„Zy)r&   ÚboolÚdeadTc                ób   — t         j                  | ||«       t        r|j                  | _        y y r   )r%   Ú__init__Ú_has_gr_contextr+   )ÚselfÚfnÚdrivers      r   r0   z_AsyncIoGreenlet.__init__`   s)   € Ü×%Ñ% d¨B°Ô7Ý&Ø*0×*;Ñ*;˜�ð 'r   N)r3   zCallable[..., Any]r4   r%   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Ú __sqlalchemy_greenlet_provider__r0   © r   r   r&   r&   [   s   … Ø“
à37Ð0ô<r   r&   F)Úglobalsr	   r%   r'   r$   Úhasattrr1   r&   r   Ú_initialize_no_greenletr   )r2   r)   r   s      r   Ú_initializez!_concurrency_shim_cls._initialize<   sž   € àœ›Ñ"Øåð"	5Ý+Ý)ð "&ˆDÔô &¤j£l°LÓAˆOô<¤8ô <ô %ˆDŒMÜ(ˆDŒOÜ$4ˆDÕ!øô? ò 	9Ý à�Ø!&ˆDÔØ×(Ñ(Ô*ÙÜ!¤.Ó1°qÐ8ô ûð	9ús   •A- Á-	B1Á61B,Â,B1c                óF   — t         | _        t         | _        t         | _        y r   )r!   r'   r%   r&   ©r2   s    r   r=   z-_concurrency_shim_cls._initialize_no_greenleti   s   € Ü*ˆŒÜ(ˆŒÜ 0ˆÕr   c                ól   — || j                   v r| j                  «        t        | |«      S t        |«      ‚r   )Ú	__slots__r>   ÚgetattrÚAttributeError)r2   Úkeys     r   Ú__getattr__z!_concurrency_shim_cls.__getattr__n   s2   € Ø�$—.‘.Ñ Ø×ÑÔÜ˜4 Ó%Ð%ä  Ó%Ð%r   N)r)   r-   ÚreturnÚNone)rE   ÚstrrG   r   )r5   r6   r7   Ú__doc__rB   r>   r=   rF   r:   r   r   r#   r#   2   s!   „ Ù'ð€Ið -1õ +5òZ1ô
&r   r#   Ú_T_coT)Ú	covariantc                 ó   — y r   r:   ©Ú	awaitables    r   ÚiscoroutinerP   {   s   € à03r   c                ó<   — t        | «      r| j                  «        y y r   )rP   ÚcloserN   s    r   Ú_safe_cancel_awaitablerS   ƒ   s   € ô �9ÔØ�‰Õð r   c                 óD   — t         j                  «       } t        | dd«      S )Nr9   F)Ú_concurrency_shimr'   rC   )Úcurrents    r   Úin_greenletrW   Š   s    € Ü×*Ñ*Ó,€GÜ�7Ð>ÀÓFÐFr   c                óÖ   — t         j                  «       }t        |dd«      s t        | «       t	        j
                  d«      ‚|j                  sJ ‚|j                  j                  | «      S )zÏAwaits an async function in a sync method.

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

    :param awaitable: The coroutine to call.

    r9   Fzfgreenlet_spawn has not been called; can't call await_() here. Was IO attempted in an unexpected place?)rU   r'   rC   rS   r   ÚMissingGreenletÚparentÚswitch)rO   rV   s     r   Úawait_r\   �   sb   € ô  ×*Ñ*Ó,€GÜ�7Ð>ÀÔFÜ˜yÔ)ä×!Ñ!ð=ó
ð 	
ð �>Š>Ðˆ>Ø�>‰>× Ñ  Ó+Ð+r   F)Ú_require_awaitc             �  óŠ  K  — t         j                  | t         j                  «       «      }d} |j                  |i |¤Ž}|j                  s+d}	 |ƒ d{  –—† }|j                  |«      }|j                  sŒ+|r|st        j                  d«      ‚|S 7 Œ=# t
        $ r$  |j                  t        j                  «       Ž }Y ŒVw xY w­w)aC  Runs a sync function ``fn`` in a new greenlet.

    The sync function can then use :func:`await_` 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.
    FTNz¶The 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.)rU   r&   r'   r[   r.   ÚBaseExceptionÚthrowÚsysÚexc_infor   ÚAwaitRequired)r3   r]   ÚargsÚkwargsÚcontextÚswitch_occurredÚresultÚvalues           r   Úgreenlet_spawnrj   ­   sÈ   è ø€ ô"  ×0Ñ0Ø
Ô×(Ñ(Ó*ó€Gð €OàˆW�^‰^˜TÐ, VÑ,€FØ�lŠlØˆð
	+ð !—LˆEð —^‘^ EÓ*ˆFð �l‹lñ ™oÜ×ÑðGó
ð 	
ð
 €Mð !ùÜò 	4ð #�W—]‘]¤C§L¡L£NÐ3ŠFð		4üsB   ‚ACÁB ÁBÁB ÁCÁ6CÂB Â*C Â=CÂ?C Ã Cc                  ó.   — e Zd Zedd„«       Zdd„Zdd„Zy)ÚAsyncAdaptedLockc                ó*   — t        j                  «       S r   )r   ÚLockr@   s    r   ÚmutexzAsyncAdaptedLock.mutexà   s   € ô �|‰|‹~Ðr   c                óH   — t        | j                  j                  «       «      S r   )r\   ro   Úacquirer@   s    r   Ú	__enter__zAsyncAdaptedLock.__enter__æ   s   € ô �d—j‘j×(Ñ(Ó*Ó+Ð+r   c                ó8   — | j                   j                  «        y r   )ro   Úrelease)r2   r   r    s      r   Ú__exit__zAsyncAdaptedLock.__exit__ë   s   € Ø�
‰
×ÑÕr   N)rG   zasyncio.Lock©rG   r-   )r   r   r    r   rG   rH   )r5   r6   r7   r   ro   rr   ru   r:   r   r   rl   rl   ß   s   „ Øòó ðó
,ô
r   rl   c                  óP   — e Zd ZdZdd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 d	d„Zdd„Zy)
Ú
_AsyncUtilz&Asyncio util for test suite/ util onlyc                ó6   — t        j                  «       | _        y r   )r   ÚRunnerÚrunnerr@   s    r   r0   z_AsyncUtil.__init__ò   s   € ä—n‘nÓ&ˆ�r   c                óD   — | j                   j                   ||i |¤Ž«      S )zRun coroutine on the loop)r{   Úrun©r2   r3   rd   re   s       r   r}   z_AsyncUtil.runö   s!   € ð �{‰{�‰™r 4Ð2¨6Ñ2Ó3Ð3r   c                ó&  — t         j                  d¬«       t         j                  rd| j                  j	                  «       j                  «       rt        «       sJ ‚ ||i |¤ŽS | j                  j                  t        |g|¢­i |¤Ž«      S  ||i |¤ŽS )z3Run sync function in greenlet. Support nested callsFr(   )	rU   r>   r$   r{   Úget_loopÚ
is_runningrW   r}   rj   r~   s       r   Úrun_in_greenletz_AsyncUtil.run_in_greenletÿ   sƒ   € ô 	×%Ñ%¨UÐ%Ô3ä×*Ò*Ø�{‰{×#Ñ#Ó%×0Ñ0Ô2ä"”}Ð$�}Ù˜4Ð* 6Ñ*Ð*à—{‘{—‘¤~°bÐ'J¸4Ò'JÀ6Ñ'JÓKÐKá�tÐ&˜vÑ&Ð&r   c                ó8   — | j                   j                  «        y r   )r{   rR   r@   s    r   rR   z_AsyncUtil.close  s   € Ø�‰×ÑÕr   N)rG   rH   )r3   z&Callable[..., Coroutine[Any, Any, _T]]rd   r   re   r   rG   r   )r3   úCallable[..., _T]rd   r   re   r   rG   r   )r5   r6   r7   rJ   r0   r}   r‚   rR   r:   r   r   rx   rx   ï   s_   „ Ù0ó'ð4à2ð4ð ð4ð ð	4ð
 
ó4ð'Ø#ð'Ø,/ð'Ø;>ð'à	ó'ô r   rx   )r   r_   rG   r-   )r   r   r    r   rG   r   )rO   zAwaitable[_T_co]rG   z%TypeGuard[Coroutine[Any, Any, _T_co]])rO   zAwaitable[Any]rG   rH   rv   )rO   zAwaitable[_T]rG   r   )
r3   r„   rd   r   r]   r-   re   r   rG   r   )!rJ   Ú
__future__r   r   ra   Útypingr   r   r   r   r   r	   r
   r   Úlanghelpersr   Ú r   r   r   r   r!   r#   rU   rK   rP   rS   rW   r\   Ú
await_onlyrj   rl   rx   r:   r   r   ú<module>rŠ      sû   ðñ -å "ã Û 
Ý Ý Ý Ý Ý Ý  Ý Ý å *Ý áˆTƒ]€óð(ð ó&÷A&ñ A&ñH *Ó+Ð áÙ�G tÔ,€Eð4Ø#ð4à	.ô4ð
 ×%Ñ%€KóóGó
,ð6 €
ð !ñ/Øð/àð/ð ð/ð ð	/ð
 ó/÷dñ ÷ !ò !r   