o
    Šågâ"  ã                   @  s„  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d�Zededd�Zeded�ZG dd„ dee ƒZG dd „ d ee ejƒZ G d!d"„ d"e e ƒZ!d+d'd(„Z"G d)d*„ d*ee ƒZ#dS ),é    )Ú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                   @  s¢   e Zd ZU i Zded< dZed!dd„ƒZed"d
d„ƒZd#dd„Ze	d$d%dd„ƒZ	ed&dd„ƒZ
ee	d'd(dd„ƒƒZee	d)d*dd„ƒƒZe	d)d*d d„ƒZdS )+ÚReversibleProxyzCClassVar[Dict[weakref.ref[Any], weakref.ref[ReversibleProxy[Any]]]]Ú_proxy_objects)Ú__weakref__Útargetr   Úreturnc                 C  ó   d S ©N© ©Úselfr   r#   r#   úW/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/base.pyÚ_assign_proxied.   ó   zReversibleProxy._assign_proxiedÚNonec                 C  r!   r"   r#   r$   r#   r#   r&   r'   1   r(   úOptional[_PT]c                 C  s:   |d urt  |tj¡}t  | t tj|¡¡}|tj|< |S r"   )ÚweakrefÚrefr   Ú_target_gcedÚ	functoolsÚpartialr   )r%   r   Ú
target_refÚ	proxy_refr#   r#   r&   r'   4   s   ÿþ
Nr,   úweakref.ref[_PT]r1   úOptional[weakref.ref[Self]]c                 C  s   | j  |d ¡ d S r"   )r   Úpop)Úclsr,   r1   r#   r#   r&   r-   A   s   zReversibleProxy._target_gcedr   c                 C  ó   t ƒ ‚r"   ©ÚNotImplementedError)r5   r   r#   r#   r&   Ú_regenerate_proxy_for_targetI   ó   z,ReversibleProxy._regenerate_proxy_for_target.Ú
regenerateúLiteral[True]c                 C  r!   r"   r#   ©r5   r   r;   r#   r#   r&   Ú_retrieve_proxy_for_targetM   s   z*ReversibleProxy._retrieve_proxy_for_targetTÚboolúOptional[Self]c                 C  r!   r"   r#   r=   r#   r#   r&   r>   U   s   c                 C  sL   z
| j t |¡ }W n	 ty   Y n
w |ƒ }|d ur|S |r$|  |¡S d S r"   )r   r+   r,   ÚKeyErrorr9   )r5   r   r;   r1   Úproxyr#   r#   r&   r>   [   s   ÿ
)r   r   r    r   )r   r)   r    r)   )r   r*   r    r*   r"   )r,   r2   r1   r3   r    r)   )r   r   r    r   ).)r   r   r;   r<   r    r   )T)r   r   r;   r?   r    r@   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Ú	__slots__r   r'   Úclassmethodr-   r9   r>   r#   r#   r#   r&   r   (   s2   
 
þ
ýýÿÿr   c                   @  sP   e Zd ZdZejdddd„ƒZdd
d„Zddd„Zejddd„ƒZ	ddd„Z
dS )ÚStartableContextr#   FÚis_ctxmanagerr?   r    r   c                 Ã  s   �t ƒ ‚r"   r7   )r%   rJ   r#   r#   r&   Ústartq   s   €zStartableContext.startúGenerator[Any, Any, _T_co]c                 C  s   |   ¡  ¡ S r"   )rK   Ú	__await__©r%   r#   r#   r&   rM   u   s   zStartableContext.__await__c                 Ã  s   �| j dd�I d H S )NT)rJ   )rK   rN   r#   r#   r&   Ú
__aenter__x   s   €zStartableContext.__aenter__Útype_r   ÚvalueÚ	tracebackúOptional[bool]c                 Ã  s   �d S r"   r#   )r%   rP   rQ   rR   r#   r#   r&   Ú	__aexit__{   s   €zStartableContext.__aexit__r   c                 C  s   t  d| jj ¡‚)Nz@%s context has not been started and object has not been awaited.)Ú	async_excÚAsyncContextNotStartedÚ	__class__rC   rN   r#   r#   r&   Ú_raise_for_not_started�   s
   ÿÿz'StartableContext._raise_for_not_startedN©F©rJ   r?   r    r   )r    rL   )r    r   )rP   r   rQ   r   rR   r   r    rS   )r    r   )rC   rD   rE   rG   ÚabcÚabstractmethodrK   rM   rO   rT   rX   r#   r#   r#   r&   rI   n   s    

rI   c                   @  s:   e Zd ZU dZded< dd
d„Zdddd„Zddd„ZdS )ÚGeneratorStartableContext©ÚgenzAsyncGenerator[_T_co, Any]r_   Úfuncú#Callable[..., AsyncIterator[_T_co]]ÚargsúTuple[Any, ...]ÚkwdsúDict[str, Any]c                 C  s   ||i |¤Ž| _ d S r"   r^   )r%   r`   rb   rd   r#   r#   r&   Ú__init__�   s   z"GeneratorStartableContext.__init__FrJ   r?   r    r   c                 Ã  sJ   �zt  | j¡I d H }W n ty   tdƒd ‚w |s#| j ¡ I d H  |S )Nzgenerator didn't yield)r   Úanext_r_   ÚStopAsyncIterationÚRuntimeErrorÚaclose)r%   rJ   Ústart_valuer#   r#   r&   rK   •   s   €
ÿzGeneratorStartableContext.startÚtypr   rQ   rR   rS   c              
   Ã  s  �|d u rzt  | j¡I d H  W tdƒ‚ ty   Y dS w |d u r%|ƒ }z| j |¡I d H  W tdƒ‚ tyI } z
||uW  Y d }~S d }~w tys } z||u r[W Y d }~dS t|ttfƒrn|j|u rnW Y d }~dS ‚ d }~w t	yŠ } z||ur‚ W Y d }~dS d }~ww )NFzgenerator didn't stopz$generator didn't stop after athrow())
r   rg   r_   rh   ri   ÚathrowÚ
isinstanceÚStopIterationÚ	__cause__ÚBaseException)r%   rl   rQ   rR   r   r#   r#   r&   rT   ¤   s>   €ýÿ!à€	ÿ
€€÷z#GeneratorStartableContext.__aexit__N)r`   ra   rb   rc   rd   re   rY   rZ   )rl   r   rQ   r   rR   r   r    rS   )rC   rD   rE   rG   rF   rf   rK   rT   r#   r#   r#   r&   r]   ˆ   s   
 
r]   r`   ra   r    ú/Callable[..., GeneratorStartableContext[_T_co]]c                   s   t  ˆ ¡d	‡ fd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.


    rb   r   rd   r    ú GeneratorStartableContext[_T_co]c                    s   t ˆ | |ƒS r"   )r]   )rb   rd   ©r`   r#   r&   Úhelperþ   s   z%asyncstartablecontext.<locals>.helperN)rb   r   rd   r   r    rs   )r.   Úwraps)r`   ru   r#   rt   r&   ÚasyncstartablecontextÙ   s   %rw   c                   @  s>   e Zd ZdZejddd„ƒZddd„Zddd„Zddd„Z	dS )ÚProxyComparabler#   r    r   c                 C  r6   r"   r7   rN   r#   r#   r&   Ú_proxied  r:   zProxyComparable._proxiedÚintc                 C  s   t | ƒS r"   )ÚidrN   r#   r#   r&   Ú__hash__  s   zProxyComparable.__hash__Úotherr   r?   c                 C  s   t || jƒo| j|jkS r"   ©rn   rW   ry   ©r%   r}   r#   r#   r&   Ú__eq__  s   
þzProxyComparable.__eq__c                 C  s   t || jƒ p| j|jkS r"   r~   r   r#   r#   r&   Ú__ne__  s   
þzProxyComparable.__ne__N)r    r   )r    rz   )r}   r   r    r?   )
rC   rD   rE   rG   r   Úro_non_memoized_propertyry   r|   r€   r�   r#   r#   r#   r&   rx     s    

rx   )r`   ra   r    rr   )$Ú
__future__r   r[   r.   Útypingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r+   Ú r   rU   r   Úutil.typingr   r   r   r   r   r   ÚABCrI   r]   rw   rx   r#   r#   r#   r&   Ú<module>   s<   F
Q,