
L]c           @   sR   d  d l  Z  d  d l Z d  d l m Z d  d l  m Z d e f d     YZ d S(   iN(   t   select(   t   Pollert   _Pollerc           B   s)   e  Z d  Z d Z d   Z d d  Z RS(   s   Replacement for :class:`zmq.Poller`

    Ensures that the greened Poller below is used in calls to
    :meth:`zmq.Poller.poll`.
    gHzG?c         C   s'  g  } g  } g  } x|  j  D] \ } } t | t j  rY | j | j t j   q nf t | t  rq | } nN t | d  r y t | j	    } Wq t
 d   q Xn t d |   | t j @r | j |  n  | t j @r | j |  n  | t j @r | j |  q q W| | | f S(   sd   Returns three elements tuple with socket descriptors ready
        for gevent.select.select
        t   filenos(   fileno() must return an valid integer fdsH   Socket must be a 0MQ socket, an integer fd or have a fileno() method: %r(   t   socketst
   isinstancet   zmqt   Sockett   appendt
   getsockoptt   FDt   intt   hasattrR   t
   ValueErrort	   TypeErrort   POLLINt   POLLOUTt   POLLERR(   t   selft   rlistt   wlistt   xlistt   sockett   flagst   fd(    (    s-   lib/python2.7/site-packages/zmq/green/poll.pyt   _get_descriptors   s.    	
ic   	      C   su  | d k r d } n  | d k  r* d } n  d } d } d } | d k ra t j j | d  } n d } z y |  j   \ } } } x t r%t t |   j d  } | s | d k r | St j j |  j	  } zF y t
 j
 | | |  Wn( t j k
 r} | | k	 r  qn XWd | j   Xq WWn) t j k
 rR} | | k	 rN  n  g  SXWd | d k rp| j   n  Xd S(   s   Overridden method to ensure that the green version of
        Poller is used.

        Behaves the same as :meth:`zmq.core.Poller.poll`
        ii    g     @@N(   t   Nonet   geventt   Timeoutt	   start_newR   t   Truet   superR   t   pollt   _gevent_bug_timeoutR    t   cancel(	   R   t   timeoutR   R   R   t   toutt   eventst   _bug_timeoutt   t(    (    s-   lib/python2.7/site-packages/zmq/green/poll.pyR    0   s>    		 	 	(   t   __name__t
   __module__t   __doc__R!   R   R    (    (    (    s-   lib/python2.7/site-packages/zmq/green/poll.pyR      s   	 (   R   R   R    R   t   _original_PollerR   (    (    (    s-   lib/python2.7/site-packages/zmq/green/poll.pyt   <module>   s   