o
    Rc7
                     @   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rt |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   =D:\Flask\env\Lib\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  r   )NotImplementedError)r   r   r   r   r   _regenerate_proxy_for_target"   s   z,ReversibleProxy._regenerate_proxy_for_targetTc                 C   sL   z
| j t| }W n	 ty   Y n
w | }|d ur|S |r$| |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_targetr   )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                       d S r   r   )r   is_ctxmanagerr   r   r   start:      zStartableContext.startc                 C   s   |    S r   )r"   	__await__r   r   r   r   r$   >   s   zStartableContext.__await__c                    s   | j ddI d H S )NT)r!   )r"   r%   r   r   r   
__aenter__A   s   zStartableContext.__aenter__c                    r    r   r   )r   type_value	tracebackr   r   r   	__aexit__D   r#   zStartableContext.__aexit__c                 C   s   t d| jj )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_startedH   s
   z'StartableContext._raise_for_not_startedN)F)r   r   r   r   abcabstractmethodr"   r$   r&   r*   r-   r   r   r   r   r   7   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__R   s   zProxyComparable.__hash__c                 C   s   t || jo| j|jkS r   
isinstancer,   Z_proxiedr   otherr   r   r   __eq__U   s   
zProxyComparable.__eq__c                 C   s   t || j p| j|jkS r   r3   r5   r   r   r   __ne__[   s   
zProxyComparable.__ne__N)r   r   r   r   r2   r7   r8   r   r   r   r   r0   O   s
    r0   )
r.   r
   r    r   r+   r   ABCr   r0   r   r   r   r   <module>   s   )