a
    4bè  ã                   @   sX   d dl Z d dlZd dlZddlmZ G dd„ dƒZG dd„ de jƒZG dd	„ d	eƒZ	dS )
é    Né   )Úexcc                   @   sD   e Zd Zi ZdZdd„ Zeddd„ƒZedd„ ƒZedd
d„ƒZ	dS )ÚReversibleProxy)Ú__weakref__c                 C   s:   |d ur6t  |tj¡}t  | t tj|¡¡}|tj|< |S ©N)ÚweakrefÚrefr   Ú_target_gcedÚ	functoolsÚpartialÚ_proxy_objects)ÚselfÚtargetZ
target_refÚ	proxy_ref© r   ú:lib/python3.9/site-packages/sqlalchemy/ext/asyncio/base.pyÚ_assign_proxied   s    þ
zReversibleProxy._assign_proxiedNc                 C   s   | j  |d ¡ d S r   )r   Úpop)Úclsr   r   r   r   r   r	      s    zReversibleProxy._target_gcedc                 C   s
   t ƒ ‚d S r   )ÚNotImplementedError)r   r   r   r   r   Ú_regenerate_proxy_for_target   s    z,ReversibleProxy._regenerate_proxy_for_targetTc                 C   sP   z| j t |¡ }W n ty&   Y n0 |ƒ }|d ur:|S |rH|  |¡S d S d S r   )r   r   r   ÚKeyErrorr   )r   r   Z
regenerater   Úproxyr   r   r   Ú_retrieve_proxy_for_target    s    
z*ReversibleProxy._retrieve_proxy_for_target)N)T)
Ú__name__Ú
__module__Ú__qualname__r   Ú	__slots__r   Úclassmethodr	   r   r   r   r   r   r   r      s   
r   c                   @   sF   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
dS )ÚStartableContextr   Fc                 Ã   s   d S r   r   )r   Úis_ctxmanagerr   r   r   Ústart4   s    zStartableContext.startc                 C   s   |   ¡  ¡ S r   )r!   Ú	__await__©r   r   r   r   r"   8   s    zStartableContext.__await__c                 Ã   s   | j ddI d H S )NT)r    )r!   r#   r   r   r   Ú
__aenter__;   s    zStartableContext.__aenter__c                 Ã   s   d S r   r   )r   Útype_ÚvalueÚ	tracebackr   r   r   Ú	__aexit__>   s    zStartableContext.__aexit__c                 C   s   t  d| jj ¡‚d S )Nz@%s context has not been started and object has not been awaited.)Ú	async_excZAsyncContextNotStartedÚ	__class__r   r#   r   r   r   Ú_raise_for_not_startedB   s
    ÿÿz'StartableContext._raise_for_not_startedN)F)r   r   r   r   ÚabcÚabstractmethodr!   r"   r$   r(   r+   r   r   r   r   r   1   s   
r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚProxyComparabler   c                 C   s   t | ƒS r   )Úidr#   r   r   r   Ú__hash__L   s    zProxyComparable.__hash__c                 C   s   t || jƒo| j|jkS r   ©Ú
isinstancer*   Z_proxied©r   Úotherr   r   r   Ú__eq__O   s    
þzProxyComparable.__eq__c                 C   s   t || jƒ p| j|jkS r   r1   r3   r   r   r   Ú__ne__U   s    
þzProxyComparable.__ne__N)r   r   r   r   r0   r5   r6   r   r   r   r   r.   I   s   r.   )
r,   r
   r   Ú r   r)   r   ÚABCr   r.   r   r   r   r   Ú<module>   s   )