
    Ef                     B    d dl Z d dl mZ d dlZd dlmZ  G d de      Zy)    N)select)Pollerc                   .     e Zd ZdZdZd Zd fd	Z xZS )_PollerzReplacement for :class:`zmq.Poller`

    Ensures that the greened Poller below is used in calls to
    :meth:`zmq.Poller.poll`.
    gHzG?c                 `   g }g }g }| j                   D ]  \  }}t        |t        j                        r/|j	                  |j                  t        j                               Pt        |t              r|}n5t        |d      r	 t        |j                               }nt        d|z        |t        j                  z  r|j	                  |       |t        j                  z  r|j	                  |       |t        j                  z  s|j	                  |        |||fS #  t        d      xY w)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)sockets
isinstancezmqSocketappend
getsockoptFDinthasattrr   
ValueError	TypeErrorPOLLINPOLLOUTPOLLERR)selfrlistwlistxlistsocketflagsfds          0/usr/lib/python3/dist-packages/zmq/green/poll.py_get_descriptorsz_Poller._get_descriptors   s    !\\ 	!MFE&#**-V..svv67FC(*QV]]_-B  46<= 
 szz!R s{{"R s{{"R -	!0 ue$$Q$%OPPs   D  D-c                    |d}|dk  rd}d}d}d}|dkD  r#t         j                  j                  |dz        }nd}	 | j                         \  }}}	 t        	|   d      }|s|dk(  r||dkD  r|j                          S S t         j                  j                  | j                        }	 t        j                  |||       |j                          # t         j                  $ r}||ur Y d}~.d}~ww xY w# |j                          w xY w# t         j                  $ r'}||ur g cY d}~|dkD  r|j                          S S d}~ww xY w# |dkD  r|j                          w w xY w)zOverridden method to ensure that the green version of
        Poller is used.

        Behaves the same as :meth:`zmq.core.Poller.poll`
        Nr   g     @@)	geventTimeout	start_newr   superpollcancel_gevent_bug_timeoutr   )
r   timeoutr   r   r   toutevents_bug_timeoutt	__class__s
            r   r&   z_Poller.poll3   sd    ?GQ;GQ;>>++Gf,<=DD	"&"7"7"9E5%aW\!& {   &~~778P8PQ*MM%6
 !'')  ~~ , - !'')~~ 	}I{ 	
 { sk   ,D )D +C D C5&C0+C8 0C55C8 8D

D E E&E'E
 EE
 
E")r!   )__name__
__module____qualname____doc__r(   r   r&   __classcell__)r.   s   @r   r   r      s       %D0 0    r   )r"   r   r   r   _original_Pollerr    r4   r   <module>r7      s       
 *[ [r4   