Ë
    ðmxiÒ#  ã                  óV  — 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d0d„Z G d„ de«      Z  edd ¬!«      Z!er		 	 	 	 d1d"„Z"nejD                  Z"d2d#„Z#d3d$„Z$d4d%„Z%d4d&„Z&d'd(œ	 	 	 	 	 	 	 	 	 d5d)„Z' G d*„ d+«      Z(d6d,„Z)eserejT                  Z+y G d-„ d.«      Z+y)7é    )Ú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y)ÚgreenletÚboolÚdeadzOptional[Context]Ú
gr_contextc                 ó   — y ©N© ©ÚselfÚfnÚdrivers      úX/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.pyÚ__init__zgreenlet.__init__(   ó   � ó    c                 ó   — y r   r   )r    Úargs     r#   Úthrowzgreenlet.throw*   ó   € Ør&   c                 ó   — y r   r   )r    Úvalues     r#   Úswitchzgreenlet.switch-   r*   r&   N©r!   zCallable[..., Any]r"   r   )r(   r   Úreturnr   )r,   r   r/   r   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r$   r)   r-   r   r&   r#   r   r   $   s   … Ø‹
Ø%Ó%ãIó	ô	r&   r   c                  ó   — y r   r   r   r&   r#   Ú
getcurrentr5   0   r%   r&   )r5   )r   r   c                ó|   — t        | t        «       xs* t        | t        j                  t        j                  f«      S r   )Ú
isinstanceÚ	ExceptionÚasyncioÚTimeoutErrorÚCancelledError)Úes    r#   Úis_exit_exceptionr=   =   s8   € ô ˜!œYÓ'Ð'ò ¬:Ø	ŒG× Ñ ¤'×"8Ñ"8Ð9ó,ð r&   c                  ó$   — e Zd ZU ded<   dZdd„Zy)Ú_AsyncIoGreenletr   r   Tc                ób   — t        j                  | ||«       t        r|j                  | _        y y r   )r   r$   Ú_has_gr_contextr   r   s      r#   r$   z_AsyncIoGreenlet.__init__O   s)   € Ü×Ñ˜$  FÔ+ÝØ$×/Ñ/ˆD�Oð r&   Nr.   )r0   r1   r2   r3   Ú __sqlalchemy_greenlet_provider__r$   r   r&   r#   r?   r?   J   s   … Ø
ƒJà'+Ð$ô0r&   r?   Ú_T_coT)Ú	covariantc                 ó   — y r   r   ©Ú	awaitables    r#   ÚiscoroutinerH   Y   s   € à03r&   c                ó<   — t        | «      r| j                  «        y y r   )rH   ÚcloserF   s    r#   Ú_safe_cancel_awaitablerK   a   s   € ô �9ÔØ�‰Õð r&   c                 ó0   — t        «       } t        | dd«      S )NrB   F)r5   Úgetattr)Úcurrents    r#   Úin_greenletrO   h   s   € Ü‹l€GÜ�7Ð>ÀÓFÐFr&   c                ó¦   — t        «       }t        |dd«      s t        | «       t        j                  d«      ‚|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_only` calls cannot be nested.

    :param awaitable: The coroutine to call.

    rB   Fzjgreenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place?)r5   rM   rK   r   ÚMissingGreenletÚparentr-   )rG   rN   s     r#   Ú
await_onlyrS   m   sO   € ô ‹l€GÜ�7Ð>ÀÔFÜ˜yÔ)ä×!Ñ!ð=ó
ð 	
ð �>‰>× Ñ  Ó+Ð+r&   c                óü   — t        «       }t        |dd«      sKt        «       }|j                  «       r t	        | «       t        j                  d«      ‚|j                  | «      S |j                  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`.

    rB   Fz˜greenlet_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?)
r5   rM   Úget_event_loopÚ
is_runningrK   r   rQ   Úrun_until_completerR   r-   )rG   rN   Úloops      r#   Úawait_fallbackrY   ‡   sr   € ô  ‹l€GÜ�7Ð>ÀÔFÜÓˆØ�?‰?ÔÜ" 9Ô-ä×%Ñ%ð;óð ð
 ×&Ñ& yÓ1Ð1à�>‰>× Ñ  Ó+Ð+r&   F)Ú_require_awaitc             �  ób  K  — t        | t        «       «      }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)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.
    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.)
r?   r5   r-   r   ÚBaseExceptionr)   ÚsysÚexc_infor   ÚAwaitRequired)r!   rZ   ÚargsÚkwargsÚcontextÚswitch_occurredÚresultr,   s           r#   Úgreenlet_spawnre   §   s·   è ø€ ô" ˜r¤:£<Ó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üs?   ‚7B/ºA? ¿A=Á A? ÁB/Á"B/Á=A? Á?*B,Â)B/Â+B,Â,B/c                  ó.   — e Zd Zedd„«       Zdd„Zdd„Zy)ÚAsyncAdaptedLockc                ó*   — t        j                  «       S r   )r9   ÚLock©r    s    r#   ÚmutexzAsyncAdaptedLock.mutex×   s   € ô �|‰|‹~Ðr&   c                óH   — t        | j                  j                  «       «      S r   )rY   rk   Úacquirerj   s    r#   Ú	__enter__zAsyncAdaptedLock.__enter__Ý   s   € ô ˜dŸj™j×0Ñ0Ó2Ó3Ð3r&   c                ó8   — | j                   j                  «        y r   )rk   Úrelease)r    r(   Úkws      r#   Ú__exit__zAsyncAdaptedLock.__exit__â   s   € Ø�
‰
×ÑÕr&   N)r/   zasyncio.Lock©r/   r   )r(   r   rq   r   r/   ÚNone)r0   r1   r2   r   rk   rn   rr   r   r&   r#   rg   rg   Ö   s   „ Øòó ðó
4ô
r&   rg   c                 óŽ   — 	 t        j                  «       S # t        $ r Y nw xY wt        j                  «       j	                  «       S )z}vendor asyncio.get_event_loop() for python 3.7 and above.

    Python 3.10 deprecates get_event_loop() as a standalone.

    )r9   Úget_running_loopÚRuntimeErrorÚget_event_loop_policyrU   r   r&   r#   rU   rU   æ   sB   € ðÜ×'Ñ'Ó)Ð)øÜò áðúô ×(Ñ(Ó*×9Ñ9Ó;Ð;s   ‚ –	"¡"c                  óT   — 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y)Ú_Runnerz#Runner implementation for test onlyz6Union[None, asyncio.AbstractEventLoop, Literal[False]]Ú_loopc                ó   — d | _         y r   )r{   rj   s    r#   r$   z_Runner.__init__ý   s	   € ØˆD�Jr&   c                ó&   — | j                  «        | S r   )Ú
_lazy_initrj   s    r#   rn   z_Runner.__enter__   s   € Ø�O‰OÔØˆKr&   c                ó$   — | j                  «        y r   )rJ   )r    Úexc_typeÚexc_valÚexc_tbs       r#   rr   z_Runner.__exit__  s   € Ø�J‰J�Lr&   c                ó  — | j                   rV	 | j                   j                  | j                   j                  «       «       | j                   j                  «        d| _         y y # | j                   j                  «        d| _         w xY w)NF)r{   rW   Úshutdown_asyncgensrJ   rj   s    r#   rJ   z_Runner.close  si   € Ø�zŠzð'Ø—J‘J×1Ñ1ØŸ
™
×5Ñ5Ó7ôð —J‘J×$Ñ$Ô&Ø!&�D•Jð øð —J‘J×$Ñ$Ô&Ø!&�D•Jús   Ž3A$ Á$#Bc                óV   — | j                  «        | j                  sJ ‚| j                  S )zReturn embedded event loop.)r~   r{   rj   s    r#   Úget_loopz_Runner.get_loop  s"   € à�O‰OÔØ—:’:Ð�:Ø—:‘:Ðr&   c                ót   — | j                  «        | j                  sJ ‚| j                  j                  |«      S r   )r~   r{   rW   )r    Úcoros     r#   Úrunz_Runner.run  s-   € Ø�O‰OÔØ—:’:Ð�:Ø—:‘:×0Ñ0°Ó6Ð6r&   c                ó‚   — | j                   du rt        d«      ‚| j                   €t        j                  «       | _         y y )NFzRunner is closed)r{   rw   r9   Únew_event_looprj   s    r#   r~   z_Runner._lazy_init  s9   € Ø�z‰z˜UÑ"Ü"Ð#5Ó6Ð6Ø�z‰zÐ!Ü$×3Ñ3Ó5�•
ð "r&   N)r/   rt   )r/   r   )r€   r   r�   r   r‚   r   r/   rt   ©r/   zasyncio.AbstractEventLoop)rˆ   zCoroutine[Any, Any, _T]r/   r   )r0   r1   r2   Ú__doc__r3   r$   rn   rr   rJ   r†   r‰   r~   r   r&   r#   rz   rz   ø   s.   … Ù1àEÓEó	ó	ó	ó	'ó	ó	7ô
	6r&   rz   )r/   r   )r<   r\   r/   r   )rG   zAwaitable[_T_co]r/   z%TypeGuard[Coroutine[Any, Any, _T_co]])rG   zAwaitable[Any]r/   rt   rs   )rG   zAwaitable[_T]r/   r   )
r!   zCallable[..., _T]r`   r   rZ   r   ra   r   r/   r   rŒ   ),Ú
__future__r   r9   Úcontextvarsr   r]   Útypingr   r   r   r   r	   r
   r   r   Úlanghelpersr   Ú r   Úutilr   Úutil.typingr   r   r   r   r   r   r5   ÚhasattrrA   r=   r?   rC   rH   rK   rO   rS   rY   re   rg   rU   ÚRunnerrz   r   r&   r#   ú<module>r—      s:  ðõ #ã Ý Û 
Û Ý Ý Ý Ý Ý Ý  Ý Ý å *Ý Ý Ý !Ý "Ý Ý #áˆTƒ]€à	×Òô
�8ô 
ô &õ $Ý!ñ ™*›,¨Ó5€óô0�xô 0ñ 	� 4Ô(€áð4Ø#ð4à	.ô4ð
 ×%Ñ%€KóóGó
,ó4,ðF !ñ,Øð,àð,ð ð,ð ð	,ð
 ó,÷^ñ ó <ñ ™Ø�n‰n�G÷(6ò (6r&   