U
    luf†  ã                   @   s<   d dl Z d dl mZ d dlZd dlmZ G dd„ deƒZdS )é    N)Úselect)ÚPollerc                       s.   e Zd ZdZdZdd„ Zd‡ fdd„	Z‡  ZS )	Ú_Pollerz„Replacement for :class:`zmq.Poller`

    Ensures that the greened Poller below is used in calls to
    :meth:`zmq.Poller.poll`.
    gHáz®Gõ?c                 C   sÒ   g }g }g }| j D ]´\}}t|tjƒr<| | tj¡¡ qnNt|tƒrL|}n>t|dƒr~zt| 	¡ ƒ}W qŠ   t
dƒ‚Y qŠX ntd| ƒ‚|tj@ rž| |¡ |tj@ r²| |¡ |tj@ r| |¡ q|||fS )zdReturns three elements tuple with socket descriptors ready
        for gevent.select.select
        Úfilenoz(fileno() must return an valid integer fdzHSocket must be a 0MQ socket, an integer fd or have a fileno() method: %r)ZsocketsÚ
isinstanceÚzmqZSocketÚappendÚ
getsockoptZFDÚintÚhasattrr   Ú
ValueErrorÚ	TypeErrorÚPOLLINÚPOLLOUTÚPOLLERR)ÚselfÚrlistÚwlistÚxlistÚsocketÚflagsÚfd© r   ú2/tmp/pip-unpacked-wheel-h6ekxre8/zmq/green/poll.pyÚ_get_descriptors   s4    

ÿÿ




z_Poller._get_descriptorséÿÿÿÿc           	   
      s4  |dkrd}|dk rd}d}d}d}|dkr>t j |d ¡}nd}zØz–|  ¡ \}}}tƒ  d¡}|sl|dkrv|W W ¢¨S t j | j¡}zFzt |||¡ W n. t jk
rÆ } z||k	r¶‚ W 5 d}~X Y nX W 5 | ¡  X qTW n< t jk
r } z||k	rú‚ g  W Y ¢W ¢S d}~X Y nX W 5 |dkr.| ¡  X dS )zOverridden method to ensure that the green version of
        Poller is used.

        Behaves the same as :meth:`zmq.core.Poller.poll`
        Nr   r   g     @@)	ÚgeventÚTimeoutÚ	start_newÚcancelr   ÚsuperÚpollÚ_gevent_bug_timeoutr   )	r   Útimeoutr   r   r   ZtoutÚeventsZ_bug_timeoutÚt©Ú	__class__r   r   r!   3   s8    
"
z_Poller.poll)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r   r!   Ú__classcell__r   r   r&   r   r      s   "r   )r   r   r   r   Z_original_Pollerr   r   r   r   r   Ú<module>   s   