ó
âžYc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z m Z d  d l Z y e j Z Wn  e e	 f k
 ru e j Z n Xd Z
 d  Z e Z e ƒ  Z d e f d „  ƒ  YZ d „  Z d „  Z e d	 d
 d d d g ƒ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ e e d ƒ r(d e f d „  ƒ  YZ n  e e d ƒ rPd e f d „  ƒ  YZ n  e e d ƒ rxd e f d „  ƒ  YZ n  e e d ƒ r d e f d „  ƒ  YZ n  d e ƒ  k r¸e Z n] d e ƒ  k rÐe Z nE d e ƒ  k rèe Z n- d e ƒ  k r e Z n d „  Z e Z e Z d S(!   iÿÿÿÿN(   t
   namedtuplet   Mappingi   i    t   SelectorErrorc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s    t  t |  ƒ j ƒ  | |  _ d  S(   N(   t   superR   t   __init__t   errno(   t   selft   errcode(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR      s    c         C   s   d j  |  j ƒ S(   Ns   <SelectorError errno={0}>(   t   formatR   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   __repr__   s    c         C   s
   |  j  ƒ  S(   N(   R	   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   __str__"   s    (   t   __name__t
   __module__R   R	   R
   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR      s   		c         C   sˆ   t  |  t ƒ r |  } nH y t |  j ƒ  ƒ } Wn/ t t t f k
 r_ t d j |  ƒ ƒ ‚ n X| d k  r„ t d j | ƒ ƒ ‚ n  | S(   sl    Return a file descriptor from a file object. If
    given an integer will simply return that integer back. s   Invalid file object: {0!r}i    s   Invalid file descriptor: {0}(   t
   isinstancet   intt   filenot   AttributeErrort	   TypeErrort
   ValueErrorR   (   t   fileobjt   fd(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   _fileobj_to_fd&   s    	c         O   sÊ  | j  d d ƒ } | d k r- d } t } n. t | ƒ } | d k  rN d } n t ƒ  | } t | ƒ } | rˆ d | k rˆ t d ƒ ‚ n  t } x5| t k rÅy |  | | Ž  } Wq‘ t t	 t
 j f k
 rÁ} d } t | d ƒ rï | j } n t | d ƒ r| j d } n  | t j k p8t t d ƒ o8| t j k }	 |	 r¦| d k	 r‘ t ƒ  }
 |
 | k rwt d t j ƒ ‚ n  | r d | k r| |
 | d <qq q‘ q‘ n  | r»t | ƒ ‚ qÂ‚  q‘ Xq‘ W| S(	   s¦    Wrapper function for syscalls that could fail due to EINTR.
    All functions should be retried if there is time left in the timeout
    in accordance with PEP 475. t   timeoutg        s4   Timeout must be in args or kwargs to be recalculatedR   t   argsi    t   WSAEINTRN(   t   gett   Nonet   Falset   floatt	   monotonict   listR   t   _SYSCALL_SENTINELt   OSErrort   IOErrort   selectt   errort   hasattrR   R   t   EINTRR   t	   ETIMEDOUTR   (   t   funct   recalc_timeoutR   t   kwargsR   t   expirest   resultt   eR   t   is_interruptt   current_time(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   _syscall_wrapper5   sJ    			t   SelectorKeyR   R   t   eventst   datat   _SelectorMappingc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s*    Mapping of file objects to selector keys c         C   s   | |  _  d  S(   N(   t	   _selector(   R   t   selector(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   s   s    c         C   s   t  |  j j ƒ S(   N(   t   lenR4   t
   _fd_to_key(   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   __len__v   s    c         C   sQ   y$ |  j  j | ƒ } |  j  j | SWn& t k
 rL t d j | ƒ ƒ ‚ n Xd  S(   Ns   {0!r} is not registered.(   R4   t   _fileobj_lookupR7   t   KeyErrorR   (   R   R   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   __getitem__y   s
    c         C   s   t  |  j j ƒ S(   N(   t   iterR4   R7   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   __iter__€   s    (   R   R   t   __doc__R   R8   R;   R=   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR3   p   s
   			t   BaseSelectorc           B   sƒ   e  Z d  Z d „  Z d „  Z d d „ Z d „  Z d d „ Z d d „ Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   s/   Abstract Selector class

    A selector supports registering file objects to be monitored
    for specific I/O events.

    A file object is a file descriptor or any object with a
    `fileno()` method. An arbitrary object can be attached to the
    file object which can be used for example to store context info,
    a callback, etc.

    A selector can use various implementations (select(), poll(), epoll(),
    and kqueue()) depending on the platform. The 'DefaultSelector' class uses
    the most efficient implementation for the current platform.
    c         C   s   i  |  _  t |  ƒ |  _ d  S(   N(   R7   R3   t   _map(   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   “   s    	c         C   sY   y t  | ƒ SWnD t k
 rT x- |  j j ƒ  D] } | j | k r. | j Sq. W‚  n Xd S(   sa   Return a file descriptor from a file object.
        This wraps _fileobj_to_fd() to do an exhaustive
        search in case the object is invalid but we still
        have it in our map. Used by unregister() so we can
        unregister an object that was previously registered
        even if it is closed. It is also used by _SelectorMapping
        N(   R   R   R7   t   valuesR   R   (   R   R   t   key(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR9   š   s    c         C   s   | s | t  t B@r. t d j | ƒ ƒ ‚ n  t | |  j | ƒ | | ƒ } | j |  j k r| t d j | | j ƒ ƒ ‚ n  | |  j | j <| S(   s8    Register a file object for a set of events to monitor. s   Invalid events: {0!r}s$   {0!r} (FD {1}) is already registered(	   t
   EVENT_READt   EVENT_WRITER   R   R0   R9   R   R7   R:   (   R   R   R1   R2   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   register®   s    	c         C   sL   y |  j  j |  j | ƒ ƒ } Wn& t k
 rG t d j | ƒ ƒ ‚ n X| S(   s0    Unregister a file object from being monitored. s   {0!r} is not registered(   R7   t   popR9   R:   R   (   R   R   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt
   unregister¼   s
    c         C   s¯   y |  j  |  j | ƒ } Wn& t k
 rB t d j | ƒ ƒ ‚ n X| | j k rw |  j | ƒ |  j | | | ƒ } n4 | | j k r« | j d | ƒ } | |  j  | j	 <n  | S(   s<    Change a registered file object monitored events and data. s   {0!r} is not registeredR2   (
   R7   R9   R:   R   R1   RG   RE   R2   t   _replaceR   (   R   R   R1   R2   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   modifyÄ   s    c         C   s   t  ƒ  ‚ d S(   sj    Perform the actual selection until some monitored file objects
        are ready or the timeout expires. N(   t   NotImplementedError(   R   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR"   ×   s    c         C   s   |  j  j ƒ  d |  _ d S(   sd    Close the selector. This must be called to ensure that all
        underlying resources are freed. N(   R7   t   clearR   R@   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   closeÜ   s    c         C   s`   |  j  ƒ  } | d k r' t d ƒ ‚ n  y | | SWn& t k
 r[ t d j | ƒ ƒ ‚ n Xd S(   s:    Return the key associated with a registered file object. s   Selector is closeds   {0!r} is not registeredN(   t   get_mapR   t   RuntimeErrorR:   R   (   R   R   t   mapping(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   get_keyâ   s    c         C   s   |  j  S(   s3    Return a mapping of file objects to selector keys (   R@   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRM   ì   s    c         C   s(   y |  j  | SWn t k
 r# d SXd S(   s_    Return the key associated to a given file descriptor
         Return None if it is not found. N(   R7   R:   R   (   R   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   _key_from_fdð   s    c         C   s   |  S(   N(    (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt	   __enter__ø   s    c         G   s   |  j  ƒ  d  S(   N(   RL   (   R   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   __exit__û   s    N(   R   R   R>   R   R9   R   RE   RG   RI   R"   RL   RP   RM   RQ   RR   RS   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR?   „   s   					
			R"   t   SelectSelectorc           B   sD   e  Z d  Z d „  Z d d „ Z d „  Z d d „ Z d d „ Z RS(   s    Select-based selector. c         C   s/   t  t |  ƒ j ƒ  t ƒ  |  _ t ƒ  |  _ d  S(   N(   R   RT   R   t   sett   _readerst   _writers(   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR     s    c         C   sb   t  t |  ƒ j | | | ƒ } | t @r> |  j j | j ƒ n  | t @r^ |  j j | j ƒ n  | S(   N(	   R   RT   RE   RC   RV   t   addR   RD   RW   (   R   R   R1   R2   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRE     s    

c         C   sB   t  t |  ƒ j | ƒ } |  j j | j ƒ |  j j | j ƒ | S(   N(   R   RT   RG   RV   t   discardR   RW   (   R   R   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRG     s    c         C   s   t  j  | | g  | ƒ S(   s?    Wrapper for select.select because timeout is a positional arg (   R"   (   R   t   rt   wR   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   _select  s    c   	      C   s  t  |  j ƒ r$ t  |  j ƒ r$ g  S| d  k r6 d  n t | d ƒ } g  } t |  j t |  j |  j | ƒ \ } } } t | ƒ } t | ƒ } x| | | BD]p } d } | | k r½ | t	 O} n  | | k rÖ | t
 O} n  |  j | ƒ } | r˜ | j | | | j @f ƒ q˜ q˜ W| S(   Ng        i    (   R6   RV   RW   R   t   maxR/   R\   t   TrueRU   RC   RD   RQ   t   appendR1   (	   R   R   t   readyRZ   R[   t   _R   R1   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR"     s$     !!N(	   R   R   R>   R   R   RE   RG   R\   R"   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRT     s   		t   pollt   PollSelectorc           B   sD   e  Z d  Z d „  Z d d „ Z d „  Z d d „ Z d d „ Z RS(   s    Poll-based selector c         C   s&   t  t |  ƒ j ƒ  t j ƒ  |  _ d  S(   N(   R   Rc   R   R"   Rb   t   _poll(   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   5  s    c         C   sr   t  t |  ƒ j | | | ƒ } d } | t @r> | t j O} n  | t @rX | t j O} n  |  j j | j	 | ƒ | S(   Ni    (
   R   Rc   RE   RC   R"   t   POLLINRD   t   POLLOUTRd   R   (   R   R   R1   R2   RB   t
   event_mask(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRE   9  s    

c         C   s/   t  t |  ƒ j | ƒ } |  j j | j ƒ | S(   N(   R   Rc   RG   Rd   R   (   R   R   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRG   C  s    c         C   sM   | d k	 r7 | d k r! d } q7 t j | d ƒ } n  |  j j | ƒ } | S(   sj    Wrapper function for select.poll.poll() so that
            _syscall_wrapper can work with only seconds. i    g     @@N(   R   t   matht   ceilRd   Rb   (   R   R   R+   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt
   _wrap_pollH  s    	c         C   s§   g  } t  |  j t d | ƒ} x‚ | D]z \ } } d } | t j @rR | t O} n  | t j @rm | t O} n  |  j | ƒ } | r% | j	 | | | j
 @f ƒ q% q% W| S(   NR   i    (   R/   Rj   R^   R"   Re   RD   Rf   RC   RQ   R_   R1   (   R   R   R`   t	   fd_eventsR   Rg   R1   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR"   V  s    !N(	   R   R   R>   R   R   RE   RG   Rj   R"   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRc   3  s   	
	t   epollt   EpollSelectorc           B   sJ   e  Z d  Z d „  Z d „  Z d d „ Z d „  Z d d „ Z d „  Z	 RS(   s    Epoll-based selector c         C   s&   t  t |  ƒ j ƒ  t j ƒ  |  _ d  S(   N(   R   Rm   R   R"   Rl   t   _epoll(   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   j  s    c         C   s   |  j  j ƒ  S(   N(   Rn   R   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   n  s    c         C   sx   t  t |  ƒ j | | | ƒ } d } | t @r> | t j O} n  | t @rX | t j O} n  t |  j	 j t
 | j | ƒ | S(   Ni    (   R   Rm   RE   RC   R"   t   EPOLLINRD   t   EPOLLOUTR/   Rn   R   R   (   R   R   R1   R2   RB   t   events_mask(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRE   q  s    

c         C   sM   t  t |  ƒ j | ƒ } y t |  j j t | j ƒ Wn t k
 rH n X| S(   N(   R   Rm   RG   R/   Rn   R   R   R   (   R   R   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRG   {  s    c   	      C   s  | d  k	 rG | d k r! d } n t j | d ƒ d } t | ƒ } n d } t t |  j ƒ d ƒ } g  } t |  j j	 t
 d | d | ƒ} x‚ | D]z \ } } d } | t j @rÀ | t O} n  | t j @rÛ | t O} n  |  j | ƒ } | r“ | j | | | j @f ƒ q“ q“ W| S(	   Ni    g        g     @@gü©ñÒMbP?g      ð¿i   R   t	   maxevents(   R   Rh   Ri   R   R]   R6   R7   R/   Rn   Rb   R^   R"   Ro   RD   Rp   RC   RQ   R_   R1   (	   R   R   t
   max_eventsR`   Rk   R   Rg   R1   RB   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR"   „  s*    		!c         C   s$   |  j  j ƒ  t t |  ƒ j ƒ  d  S(   N(   Rn   RL   R   Rm   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRL   ¥  s    N(
   R   R   R>   R   R   R   RE   RG   R"   RL   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRm   h  s   		
		!t   kqueuet   KqueueSelectorc           B   sJ   e  Z d  Z d „  Z d „  Z d d „ Z d „  Z d d „ Z d „  Z	 RS(   s     Kqueue / Kevent-based selector c         C   s&   t  t |  ƒ j ƒ  t j ƒ  |  _ d  S(   N(   R   Ru   R   R"   Rt   t   _kqueue(   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   ­  s    c         C   s   |  j  j ƒ  S(   N(   Rv   R   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR   ±  s    c         C   s¶   t  t |  ƒ j | | | ƒ } | t @rh t j | j t j t j ƒ } t	 |  j
 j t | g d d ƒ n  | t @r² t j | j t j t j ƒ } t	 |  j
 j t | g d d ƒ n  | S(   Ni    (   R   Ru   RE   RC   R"   t   keventR   t   KQ_FILTER_READt	   KQ_EV_ADDR/   Rv   t   controlR   RD   t   KQ_FILTER_WRITE(   R   R   R1   R2   RB   Rw   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRE   ´  s    
"
"c         C   sæ   t  t |  ƒ j | ƒ } | j t @r} t j | j t j t j	 ƒ } y# t
 |  j j t | g d d ƒ Wq} t k
 ry q} Xn  | j t @râ t j | j t j t j	 ƒ } y# t
 |  j j t | g d d ƒ Wqâ t k
 rÞ qâ Xn  | S(   Ni    (   R   Ru   RG   R1   RC   R"   Rw   R   Rx   t   KQ_EV_DELETER/   Rv   Rz   R   R   RD   R{   (   R   R   RB   Rw   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRG   Æ  s$    ##c         C   s9  | d  k	 r t | d ƒ } n  t |  j ƒ d } i  } t |  j j t d  | | ƒ } xÑ | D]É } | j } | j	 } d } | t
 j k r– | t O} n  | t
 j k r² | t O} n  |  j | ƒ }	 |	 r\ |	 j | k ró |	 | |	 j @f | |	 j <q%| |	 j d }
 |	 | |
 B|	 j @f | |	 j <q\ q\ Wt | j ƒ  ƒ S(   Ni    i   i   (   R   R]   R6   R7   R/   Rv   Rz   R^   t   identt   filterR"   Rx   RC   R{   RD   RQ   R   R1   R   RA   (   R   R   Rs   t	   ready_fdst   kevent_listRw   R   Rg   R1   RB   t
   old_events(    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyR"   Û  s*    		%c         C   s$   |  j  j ƒ  t t |  ƒ j ƒ  d  S(   N(   Rv   RL   R   Ru   (   R   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRL   ø  s    N(
   R   R   R>   R   R   R   RE   RG   R"   RL   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyRu   «  s   			c         C   s   t  d ƒ ‚ d  S(   Ns!   Platform does not have a selector(   R   (   Ra   (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   no_selector	  s    i   i   (    R   Rh   R"   t   collectionsR    R   t   timeR   R   t   ImportErrorRC   RD   R^   t
   HAS_SELECTt   objectR   t	   ExceptionR   R   R/   R0   R3   R?   R$   RT   Rc   Rm   Ru   t   globalst   DefaultSelectorR‚   R   (    (    (    sa   /data/av2000/soap/soapenv/lib/python2.7/site-packages/requests/packages/urllib3/util/selectors.pyt   <module>   sJ   			8|14BU					