
    g"                       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ZddlmZ ddlmZ ddlmZ ddlmZ  ede      Z eded      Z ede      Z G d dee         Z G d d ee   ej>                        Z  G d! d"e e         Z!	 	 	 	 d&d#Z" G d$ d%ee         Z#y)'    )annotationsN)Any)AsyncGenerator)AsyncIterator)	Awaitable)Callable)ClassVar)Dict)	Generator)Generic)NoReturn)Optional)overload)Tuple)TypeVar   )exc   )util)Literal)Self_T)bound_T_coT)r   	covariant_PTc                      e Zd ZU i Zded<   dZedd       Zedd       ZddZe	 d	 	 	 	 	 dd       Z	edd	       Z
ee	 d	 	 	 	 	 dd
              Zee	 d	 	 	 	 	 dd              Ze	 d	 	 	 	 	 dd       Zy)ReversibleProxyzCClassVar[Dict[weakref.ref[Any], weakref.ref[ReversibleProxy[Any]]]]_proxy_objects)__weakref__c                     y N selftargets     Z/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/base.py_assign_proxiedzReversibleProxy._assign_proxied.   s    36    c                     y r"   r#   r$   s     r'   r(   zReversibleProxy._assign_proxied1   s    58r)   c                    |ot        j                  |t        j                        }t        j                  | t	        j
                  t        j                  |            }|t        j                  |<   |S r"   )weakrefrefr   _target_gced	functoolspartialr   )r%   r&   
target_ref	proxy_refs       r'   r(   zReversibleProxy._assign_proxied4   sb    +2;;44,J  !!/">">
KI :CO**:6r)   Nc                <    | j                   j                  |d        y r"   )r   pop)clsr-   r2   s      r'   r.   zReversibleProxy._target_gcedA   s     	sD)r)   c                    t               r"   NotImplementedError)r5   r&   s     r'   _regenerate_proxy_for_targetz,ReversibleProxy._regenerate_proxy_for_targetI       !##r)   c                     y r"   r#   r5   r&   
regenerates      r'   _retrieve_proxy_for_targetz*ReversibleProxy._retrieve_proxy_for_targetM   s     r)   c                     y r"   r#   r<   s      r'   r>   z*ReversibleProxy._retrieve_proxy_for_targetU   s     r)   c                    	 | j                   t        j                  |         } |       }||S |r| j	                  |      S y # t        $ r Y w xY wr"   )r   r,   r-   KeyErrorr9   )r5   r&   r=   r2   proxys        r'   r>   z*ReversibleProxy._retrieve_proxy_for_target[   s_    	**7;;v+>?I KE 33F;;  		s   "A 	AA)r&   r   returnr   )r&   NonerC   rD   )r&   Optional[_PT]rC   rE   r"   )r-   zweakref.ref[_PT]r2   zOptional[weakref.ref[Self]]rC   rD   )r&   r   rC   r   ).)r&   r   r=   zLiteral[True]rC   r   )T)r&   r   r=   boolrC   zOptional[Self])__name__
__module____qualname__r   __annotations__	__slots__r   r(   classmethodr.   r9   r>   r#   r)   r'   r   r   (   s*    	    !I6 68 8  26** /* 
	* * $ $  %( " 
	   -1&*	   -1&*	 r)   r   c                      e Zd ZdZej
                  dd	d       Zd
dZddZej
                  	 	 	 	 	 	 	 	 dd       Z	ddZ
y)StartableContextr#   c                   K   t               wr"   r7   )r%   is_ctxmanagers     r'   startzStartableContext.startq   s     !##s   c                >    | j                         j                         S r"   )rQ   	__await__r%   s    r'   rS   zStartableContext.__await__u   s    zz|%%''r)   c                B   K   | j                  d       d {   S 7 w)NT)rP   )rQ   rT   s    r'   
__aenter__zStartableContext.__aenter__x   s     ZZdZ3333s   c                   K   y wr"   r#   )r%   type_value	tracebacks       r'   	__aexit__zStartableContext.__aexit__{   s      	s   c                Z    t        j                  d| j                  j                  z        )Nz@%s context has not been started and object has not been awaited.)	async_excAsyncContextNotStarted	__class__rG   rT   s    r'   _raise_for_not_startedz'StartableContext._raise_for_not_started   s*    ..N~~&&(
 	
r)   NFrP   rF   rC   r   )rC   zGenerator[Any, Any, _T_co])rC   r   )rX   r   rY   r   rZ   r   rC   Optional[bool])rC   r   )rG   rH   rI   rK   abcabstractmethodrQ   rS   rV   r[   r`   r#   r)   r'   rN   rN   n   sh    I$ $(4 	!$14	 

r)   rN   c                  R    e Zd ZU dZded<   	 	 	 	 	 	 ddZd	d
dZ	 	 	 	 	 	 	 	 ddZy)GeneratorStartableContextgenzAsyncGenerator[_T_co, Any]ri   c                     ||i || _         y r"   rh   )r%   funcargskwdss       r'   __init__z"GeneratorStartableContext.__init__   s     &&r)   c                   K   	 t        j                  | j                         d {   }|s"| j                  j                          d {    |S 7 *# t        $ r t	        d      d w xY w7 !w)Nzgenerator didn't yield)r   anext_ri   StopAsyncIterationRuntimeErroraclose)r%   rP   start_values      r'   rQ   zGeneratorStartableContext.start   si     	C $DHH 55K ((//### 6! 	C78dB	C $s7   A."A AA A.
A,A.A A))A.c                  K   |3	 t        j                  | j                         d {    t        d      | |       }	 | j                  j                  |       d {    t        d      7 G# t        $ r Y yw xY w7  # t        $ r}||ucY d }~S d }~wt        $ r8}||u rY d }~yt        |t        t        f      r|j                  |u rY d }~y d }~wt        $ r}||ur Y d }~yd }~ww xY ww)Nzgenerator didn't stopFz$generator didn't stop after athrow())
r   rp   ri   rr   rq   athrow
isinstanceStopIteration	__cause__BaseException)r%   typrY   rZ   r   s        r'   r[   z#GeneratorStartableContext.__aexit__   s      ;<kk$((+++ ##:;;} !hhooe,,,B EFFY ,%  -% ( %'' %<  u}6H&IJ.   	 e#	s   C2"A2 A0A2 C2B  B!B %C20A2 2	A>;C2=A>>C2B 	C/BC/C2C/!C%C2*$CC2CC/ C*%C2*C//C2N)rk   #Callable[..., AsyncIterator[_T_co]]rl   zTuple[Any, ...]rm   zDict[str, Any]ra   rb   )r{   r   rY   r   rZ   r   rC   rc   )rG   rH   rI   rK   rJ   rn   rQ   r[   r#   r)   r'   rg   rg      s]    I	##'1' ' 	'2G2G"2G/22G	2Gr)   rg   c                D     t        j                         d fd       }|S )a=  @asyncstartablecontext decorator.

    the decorated function can be called either as ``async with fn()``, **or**
    ``await fn()``.   This is decidedly different from what
    ``@contextlib.asynccontextmanager`` supports, and the usage pattern
    is different as well.

    Typical usage:

    .. sourcecode:: text

        @asyncstartablecontext
        async def some_async_generator(<arguments>):
            <setup>
            try:
                yield <value>
            except GeneratorExit:
                # return value was awaited, no context manager is present
                # and caller will .close() the resource explicitly
                pass
            else:
                <context manager cleanup>


    Above, ``GeneratorExit`` is caught if the function were used as an
    ``await``.  In this case, it's essential that the cleanup does **not**
    occur, so there should not be a ``finally`` block.

    If ``GeneratorExit`` is not invoked, this means we're in ``__aexit__``
    and we were invoked as a context manager, and cleanup should proceed.


    c                     t        | |      S r"   )rg   )rl   rm   rk   s     r'   helperz%asyncstartablecontext.<locals>.helper   s    (tT::r)   )rl   r   rm   r   rC   z GeneratorStartableContext[_T_co])r/   wraps)rk   r   s   ` r'   asyncstartablecontextr      s(    J __T; ; Mr)   c                  N    e Zd ZdZej
                  dd       ZddZd	dZd	dZ	y)
ProxyComparabler#   c                    t               r"   r7   rT   s    r'   _proxiedzProxyComparable._proxied  r:   r)   c                    t        |       S r"   )idrT   s    r'   __hash__zProxyComparable.__hash__  s    $xr)   c                d    t        || j                        xr | j                  |j                  k(  S r"   rw   r_   r   r%   others     r'   __eq__zProxyComparable.__eq__  s*    udnn- 0/	
r)   c                f    t        || j                         xs | j                  |j                  k7  S r"   r   r   s     r'   __ne__zProxyComparable.__ne__  s-    5$..11 /}}.	
r)   N)rC   r   )rC   int)r   r   rC   rF   )
rG   rH   rI   rK   r   ro_non_memoized_propertyr   r   r   r   r#   r)   r'   r   r     s.    I	""$ #$

r)   r   )rk   r|   rC   z/Callable[..., GeneratorStartableContext[_T_co]])$
__future__r   rd   r/   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r,    r   r]   r   util.typingr   r   r   r   r   r   ABCrN   rg   r   r   r#   r)   r'   <module>r      s    # 
   !                 " Tsd3 e3Cgcl CL
y' 
4NG 0 7 NGb)
-)4)X
oc* 
r)   