B
    b
,c

  ã               @   sÔ   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
ZddlmZmZ G dd„ deƒZG d	d
„ d
eƒZG dd„ dƒZG dd„ dƒZG dd„ deeƒZG dd„ deeƒZee_G dd„ deje ƒZdS )zUFuture-returning APIs for tornado coroutines.

.. seealso::

    :mod:`zmq.asyncio`

é    N)ÚAnyÚType)ÚFuture)ÚIOLoop)Ú_AsyncPollerÚ_AsyncSocketc               @   s   e Zd ZdS )ÚCancelledErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú3lib/python3.7/site-packages/zmq/eventloop/future.pyr      s   r   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TornadoFuturez2Subclass Tornado Future, reinstating cancellation.c             C   s   |   ¡ rdS |  tƒ ¡ dS )NFT)ÚdoneZset_exceptionr   )Úselfr   r   r   Úcancel   s    z_TornadoFuture.cancelc             C   s   |   ¡ ot|  ¡ tƒS )N)r   Ú
isinstanceZ	exceptionr   )r   r   r   r   Ú	cancelled$   s    z_TornadoFuture.cancelledN)r	   r
   r   Ú__doc__r   r   r   r   r   r   r      s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_CancellableTornadoTimeoutc             C   s   || _ || _d S )N)ÚloopÚtimeout)r   r   r   r   r   r   Ú__init__)   s    z#_CancellableTornadoTimeout.__init__c             C   s   | j  | j¡ d S )N)r   Zremove_timeoutr   )r   r   r   r   r   -   s    z!_CancellableTornadoTimeout.cancelN)r	   r
   r   r   r   r   r   r   r   r   (   s   r   c               @   s<   e Zd ZU eZeej ed< e	j
Ze	jZdd„ Zdd„ ZdS )Ú_AsyncTornadoÚ_Futurec             C   s   t  ¡ S )N)r   Zcurrent)r   r   r   r   Ú_default_loop9   s    z_AsyncTornado._default_loopc             C   s   |   ¡ }| ||¡}t||ƒS )N)Z	_get_loopZ
call_laterr   )r   ZdelayÚcallbackÚio_loopr   r   r   r   Ú_call_later<   s    z_AsyncTornado._call_laterN)r	   r
   r   r   r   r   Úasyncior   Ú__annotations__r   ZREADZ_READZWRITEZ_WRITEr   r   r   r   r   r   r   4   s
   
r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚPollerc                s   |  |‡ fdd„|¡ dS )z"Schedule callback for a raw socketc                 s   ˆ ƒ S )Nr   )Úargs)Úfr   r   Ú<lambda>E   ó    z*Poller._watch_raw_socket.<locals>.<lambda>N)Zadd_handler)r   r   ÚsocketZevtr#   r   )r#   r   Ú_watch_raw_socketC   s    zPoller._watch_raw_socketc             G   s   x|D ]}|  |¡ qW dS )z$Unschedule callback for a raw socketN)Zremove_handler)r   r   Zsocketsr&   r   r   r   Ú_unwatch_raw_socketsG   s    
zPoller._unwatch_raw_socketsN)r	   r
   r   r'   r(   r   r   r   r   r!   B   s   r!   c               @   s   e Zd ZeZdS )ÚSocketN)r	   r
   r   r!   Z_poller_classr   r   r   r   r)   M   s   r)   c                   s<   e Zd ZdZdZedd„ ƒZd eeddœ‡ fdd„Z‡  Z	S )ÚContextNc             C   s
   t | |ƒS )N)r)   )r   Zsocket_typer   r   r   Ú_socket_class[   s    zContext._socket_class)r   r"   ÚkwargsÚreturnc                s@   |  dd ¡}|d k	r.tj| jj› dtdd tƒ j||Ž d S )Nr   z^(io_loop) argument is deprecated in pyzmq 22.2. The currently active loop will always be used.é   )Ú
stacklevel)ÚpopÚwarningsÚwarnÚ	__class__r	   ÚDeprecationWarningÚsuperr   )r   r"   r,   r   )r3   r   r   r   _   s    zContext.__init__)
r	   r
   r   Z	_instancer   Ústaticmethodr+   r   r   Ú__classcell__r   r   )r3   r   r*   T   s   r*   )r   r   r1   Útypingr   r   Ztornado.concurrentr   Ztornado.ioloopr   ZzmqZ_zmqZzmq._futurer   r   Ú	Exceptionr   r   r   r   r!   r)   r+   r*   r   r   r   r   Ú<module>   s   