
    0P@i"                       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     e/home/www/lebenam.kofcorporation.com/venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/base.py_assign_proxiedzReversibleProxy._assign_proxied.           c                     y r"   r#   r$   s     r'   r(   zReversibleProxy._assign_proxied2   r)   r*   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_proxied6   sb    +2;;44,J  !!/">">
KI :CO**:6r*   Nc                <    | j                   j                  |d        y r"   )r   pop)clsr.   r3   s      r'   r/   zReversibleProxy._target_gcedC   s     	sD)r*   c                    t               r"   NotImplementedError)r6   r&   s     r'   _regenerate_proxy_for_targetz,ReversibleProxy._regenerate_proxy_for_targetK       !##r*   c                     y r"   r#   r6   r&   
regenerates      r'   _retrieve_proxy_for_targetz*ReversibleProxy._retrieve_proxy_for_targetO   s     	r*   c                     y r"   r#   r=   s      r'   r?   z*ReversibleProxy._retrieve_proxy_for_targetX   s    
 	r*   c                    	 | j                   t        j                  |         } |       }||S |r| j	                  |      S y # t        $ r Y w xY wr"   )r   r-   r.   KeyErrorr:   )r6   r&   r>   r3   proxys        r'   r?   z*ReversibleProxy._retrieve_proxy_for_target_   s_    	**7;;v+>?I KE 33F;;  		s   "A 	AA)r&   r   returnr   )r&   NonerD   rE   )r&   Optional[_PT]rD   rF   r"   )r.   zweakref.ref[_PT]r3   zOptional[weakref.ref[Self]]rD   rE   )r&   r   rD   r   ).)r&   r   r>   zLiteral[True]rD   r   )T)r&   r   r>   boolrD   zOptional[Self])__name__
__module____qualname__r   __annotations__	__slots__r   r(   classmethodr/   r:   r?   r#   r*   r'   r   r   (   s4    	    !I     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"   r8   )r%   is_ctxmanagers     r'   startzStartableContext.startu   s     !##s   c                >    | j                         j                         S r"   )rR   	__await__r%   s    r'   rT   zStartableContext.__await__y   s    zz|%%''r*   c                B   K   | j                  d       d {   S 7 w)NT)rQ   )rR   rU   s    r'   
__aenter__zStartableContext.__aenter__|   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__rH   rU   s    r'   _raise_for_not_startedz'StartableContext._raise_for_not_started   s*    ..N~~&&(
 	
r*   NFrQ   rG   rD   r   )rD   zGenerator[Any, Any, _T_co])rD   r   )rY   r   rZ   r   r[   r   rD   Optional[bool])rD   r   )rH   rI   rJ   rL   abcabstractmethodrR   rT   rW   r\   ra   r#   r*   r'   rO   rO   r   sh    I$ $(4 	!$14	 

r*   rO   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]rj   c                     ||i || _         y r"   ri   )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_rj   StopAsyncIterationRuntimeErroraclose)r%   rQ   start_values      r'   rR   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   rq   rj   rs   rr   athrow
isinstanceStopIteration	__cause__BaseException)r%   typrZ   r[   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)rl   #Callable[..., AsyncIterator[_T_co]]rm   zTuple[Any, ...]rn   zDict[str, Any]rb   rc   )r|   r   rZ   r   r[   r   rD   rd   )rH   rI   rJ   rL   rK   ro   rR   r\   r#   r*   r'   rh   rh      s]    I	##'1' ' 	'2G2G"2G/22G	2Gr*   rh   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::

        @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"   )rh   )rm   rn   rl   s     r'   helperz%asyncstartablecontext.<locals>.helper   s    (tT::r*   )rm   r   rn   r   rD   z GeneratorStartableContext[_T_co])r0   wraps)rl   r   s   ` r'   asyncstartablecontextr      s(    F __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"   r8   rU   s    r'   _proxiedzProxyComparable._proxied
  r;   r*   c                    t        |       S r"   )idrU   s    r'   __hash__zProxyComparable.__hash__  s    $xr*   c                d    t        || j                        xr | j                  |j                  k(  S r"   rx   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)rD   r   )rD   int)r   r   rD   rG   )
rH   rI   rJ   rL   r   ro_non_memoized_propertyr   r   r   r   r#   r*   r'   r   r     s.    I	""$ #$

r*   r   )rl   r}   rD   z/Callable[..., GeneratorStartableContext[_T_co]])$
__future__r   re   r0   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   ABCrO   rh   r   r   r#   r*   r'   <module>r      s    # 
   !                 " Tsd3 e3Ggcl GT
y' 
4NG 0 7 NGb'
-'4'T
oc* 
r*   