ó
j·Ã^c           @   s  d  d l  Z  d  d l m Z d  d l Z d  d l Z y d  d l m Z Wn! e k
 rk d  d l m Z n Xd d d g Z d e	 f d „  ƒ  YZ
 e j d k r¬ d „  Z n	 d „  Z e e d d „ Z e e d d „ Z d „  Z d „  Z d „  a d d „ Z d d „ Z d S(   iÿÿÿÿN(   t   partial(   t	   monotonic(   t   timet   NoWayToWaitForSocketErrort   wait_for_readt   wait_for_writec           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyR      s   i   i   c         C   s
   |  | ƒ S(   N(    (   t   fnt   timeout(    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   _retry_on_intr*   s    c         C   sÂ   | d  k r t d ƒ } n t ƒ  | } x“ t r½ y |  | ƒ SWq+ t t j f k
 r¹ } | j d t j	 k rv ‚  qº | t ƒ  } | d k  r˜ d } n  | t d ƒ k r+ d  } q+ q+ q+ Xq+ Wd  S(   Nt   infi    (
   t   Nonet   floatR   t   Truet   OSErrort   selectt   errort   argst   errnot   EINTR(   R   R	   t   deadlinet   e(    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyR
   0   s    			c   
      C   s›   | r | r t  d ƒ ‚ n  g  } g  } | r? | j |  ƒ n  | rU | j |  ƒ n  t t j | | | ƒ } t | | ƒ \ } } }	 t | p— | p— |	 ƒ S(   Ns2   must specify at least one of read=True, write=True(   t   RuntimeErrort   appendR    R   R
   t   bool(
   t   sockt   readt   writeR	   t   rcheckt   wcheckR   t   rreadyt   wreadyt   xready(    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   select_wait_for_socketG   s    c            s   | r | r t  d ƒ ‚ n  d } | r9 | t j O} n  | rO | t j O} n  t j ƒ  ‰  ˆ  j |  | ƒ ‡  f d †  } t t | | ƒ ƒ S(   Ns2   must specify at least one of read=True, write=Truei    c            s&   |  d  k	 r |  d 9}  n  ˆ  j |  ƒ S(   Niè  (   R   t   poll(   t   t(   t   poll_obj(    s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   do_pollf   s    (   R   R   t   POLLINt   POLLOUTR#   t   registerR   R
   (   R   R   R   R	   t   maskR&   (    (   R%   s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   poll_wait_for_socketZ   s    c          O   s   t  d ƒ ‚ d  S(   Ns   no select-equivalent available(   R   (   R   t   kwargs(    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   null_wait_for_socketn   s    c          C   sC   y  t  j ƒ  }  t |  j d ƒ Wn t t f k
 r: t SXt Sd  S(   Ni    (   R   R#   R
   t   AttributeErrorR   t   FalseR   (   R%   (    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   _have_working_pollr   s    c          O   s=   t  ƒ  r t a n t t d ƒ r* t a n t a t |  | Ž  S(   NR   (   R0   R+   t   wait_for_sockett   hasattrR   R"   R-   (   R   R,   (    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyR1      s    			c         C   s   t  |  d t d | ƒS(   s‡    Waits for reading to be available on a given socket.
    Returns True if the socket is readable, or False if the timeout expired.
    R   R	   (   R1   R   (   R   R	   (    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyR   Ž   s    c         C   s   t  |  d t d | ƒS(   s‡    Waits for writing to be available on a given socket.
    Returns True if the socket is readable, or False if the timeout expired.
    R   R	   (   R1   R   (   R   R	   (    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyR   •   s    (   i   i   (   R   t	   functoolsR    R   t   sysR   R   t   ImportErrort   __all__t	   ExceptionR   t   version_infoR
   R/   R   R"   R+   R-   R0   R1   R   R   (    (    (    s.   site-packages/pip/_vendor/urllib3/util/wait.pyt   <module>   s&   				