U
    dT                     @   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   s
   t  d S NNotImplementedErrorselfZ
on_successZon_errorr   r   1/tmp/pip-unpacked-wheel-eu4qp6cm/vine/abstract.pythen   s    zThenable.thenTc                 C   s
   t  d S r   r   r	   exctb	propagater   r   r
   throw   s    zThenable.throwc                 C   s
   t  d S r   r   r	   r   r   r
   cancel   s    zThenable.cancelc                 C   s$   | t kr tdd |jD r dS tS )Nc                 s   s   | ]}d |j k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.register)N)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+   s    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   s    zThenableProxy.cancelc                 C   s   | j |S r   )r*   throw1)r	   r   r   r   r
   r-   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   s   | j jS r   )r*   	cancelledr   r   r   r
   r.   :   s    zThenableProxy.cancelledc                 C   s   | j jS r   )r*   readyr   r   r   r
   r/   >   s    zThenableProxy.readyc                 C   s   | j jS r   )r*   failedr   r   r   r
   r0   B   s    zThenableProxy.failed)N)N)NNT)r    r!   r"   r#   r,   r   r   r-   r   propertyr.   r/   r0   r   r   r   r
   r)   '   s   




r)   )	r#   r%   collections.abcr   __all__ABCMetar   r   r)   r   r   r   r
   <module>   s   