o
    DfT                     @   sL   d Z ddlZddlmZ dgZG dd deejdZejG dd dZdS )	zAbstract classes.    N)CallableThenablec                   @   sZ   e Zd ZdZdZejdddZejdddZejd	d
 Z	e
dd Ze
dd ZdS )r   z!Object that supports ``.then()``. Nc                 C      t  NNotImplementedErrorself
on_successon_errorr   r   F/home/ubuntu/webapp/venv/lib/python3.10/site-packages/vine/abstract.pythen      zThenable.thenTc                 C   r   r   r   r
   exctb	propagater   r   r   throw   r   zThenable.throwc                 C   r   r   r   r
   r   r   r   cancel   r   zThenable.cancelc                 C   s$   | t u rtdd |jD rdS tS )Nc                 s   s    | ]}d |j v V  qdS )r   N)__dict__).0Br   r   r   	<genexpr>   s    z,Thenable.__subclasshook__.<locals>.<genexpr>T)r   any__mro__NotImplemented)clsCr   r   r   __subclasshook__   s   zThenable.__subclasshook__c                 C   s   t | | | |S r   )typeregister)r   otherr   r   r   r"       s   zThenable.registerr   NNT)__name__
__module____qualname____doc__	__slots__abcabstractmethodr   r   r   classmethodr    r"   r   r   r   r   r      s    

)	metaclassc                   @   sb   e Zd ZdZdd ZdddZdd Zdd	d
ZdddZe	dd Z
e	dd Ze	dd ZdS )ThenableProxyz*Proxy to object that supports ``.then()``.c                 C   s
   || _ d S r   )_p)r
   pr   r   r   _set_promise_target+      
z!ThenableProxy._set_promise_targetNc                 C   s   | j ||S r   )r/   r   r	   r   r   r   r   .   s   zThenableProxy.thenc                 C   s
   | j  S r   )r/   r   r   r   r   r   r   1   r2   zThenableProxy.cancelc                 C   s   | j |S r   )r/   throw1)r
   r   r   r   r   r3   4   s   zThenableProxy.throw1Tc                 C   s   | j j|||dS )N)r   r   )r/   r   r   r   r   r   r   7   s   zThenableProxy.throwc                 C      | j jS r   )r/   	cancelledr   r   r   r   r5   :      zThenableProxy.cancelledc                 C   r4   r   )r/   readyr   r   r   r   r7   >   r6   zThenableProxy.readyc                 C   r4   r   )r/   failedr   r   r   r   r8   B   r6   zThenableProxy.failedr   r$   )r%   r&   r'   r(   r1   r   r   r3   r   propertyr5   r7   r8   r   r   r   r   r.   '   s    




r.   )	r(   r*   collections.abcr   __all__ABCMetar   r"   r.   r   r   r   r   <module>   s    