ó •abc@sddlZddlZddlZddlZddlZddlZddlmZmZy ej Z Wn e e fk rejZ nXd#Z d$Z eZeƒZdadefd„ƒYZd„Zejd%kréd „Zn d „Zed d dddgƒZdefd„ƒYZdefd„ƒYZeedƒradefd„ƒYZneedƒr‰defd„ƒYZneedƒr±defd„ƒYZneedƒrÙdefd „ƒYZ needƒsñe!Znd!„Z"d"„Z#dS(&iÿÿÿÿN(t namedtupletMappingiit SelectorErrorcBs#eZd„Zd„Zd„ZRS(cCs tt|ƒjƒ||_dS(N(tsuperRt__init__terrno(tselfterrcode((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRscCsdj|jƒS(Ns(tformatR(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt__repr__"scCs |jƒS(N(R (R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt__str__%s(t__name__t __module__RR R (((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRs  cCsˆt|tƒr|}nHyt|jƒƒ}Wn/tttfk r_tdj|ƒƒ‚nX|dkr„tdj|ƒƒ‚n|S(sl Return a file descriptor from a file object. If given an integer will simply return that integer back. sInvalid file object: {0!r}isInvalid file descriptor: {0}(t isinstancetinttfilenotAttributeErrort TypeErrort ValueErrorR(tfileobjtfd((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt_fileobj_to_fd)s  iicOsdy|||ŽSWnLtttjfk r_}d}t|dƒrP|j}nt|ƒ‚nXdS(s¤ This is the short-circuit version of the below logic because in Python 3.5+ all system calls automatically restart and recalculate their timeouts. RN(tOSErrortIOErrortselectterrortNonethasattrRR(tfunct_targstkwargsteR((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt_syscall_wrapper;s c OsÊ|jddƒ}|dkr-d}t}n.t|ƒ}|dkrNd}n tƒ|}t|ƒ}|rˆd|krˆtdƒ‚nt}x5|tkrÅy|||Ž}Wq‘tt t j fk rÁ}d}t |dƒrï|j }nt |dƒr|jd}n|t jkp8t t dƒo8|t jk} | r¦|dk r‘tƒ} | |krwtdt jƒ‚n|r d|kr|| |d(((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyR4‚s    t BaseSelectorcBsƒeZdZd„Zd„Zd d„Zd„Zd d„Zd d„Z d„Z d„Z d „Z d „Z d „Zd „ZRS(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. cCsi|_t|ƒ|_dS(N(R8R4t_map(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyR¥s cCsYyt|ƒSWnDtk rTx-|jjƒD]}|j|kr.|jSq.W‚nXdS(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(RRR8tvaluesRR(RRtkey((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyR:¬s  cCs| s|ttB@r.tdj|ƒƒ‚nt||j|ƒ||ƒ}|j|jkr|tdj||jƒƒ‚n||j|j<|S(s8 Register a file object for a set of events to monitor. sInvalid events: {0!r}s${0!r} (FD {1}) is already registered( t EVENT_READt EVENT_WRITERRR1R:RR8R;(RRR2R3RC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pytregisterÀs cCsÎy|jj|j|ƒƒ}Wn¨tk rGtdj|ƒƒ‚nƒtjk rÉ}|jtjkrq‚qÊxV|jj ƒD],}|j |kr|jj|j ƒPqqWtdj|ƒƒ‚nX|S(s0 Unregister a file object from being monitored. s{0!r} is not registered( R8tpopR:R;RtsocketRRtEBADFRBRR(RRRCR ((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt unregisterÎs cCs¯y|j|j|ƒ}Wn&tk rBtdj|ƒƒ‚nX||jkrw|j|ƒ|j|||ƒ}n4||jkr«|jd|ƒ}||j|j |jj|jƒn|t@r^|jj|jƒn|S(N( RRWRFRDRYtaddRRERZ(RRR2R3RC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRF&s   cCsBtt|ƒj|ƒ}|jj|jƒ|jj|jƒ|S(N(RRWRJRYtdiscardRRZ(RRRC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRJ.scCstj||g|ƒS(s? Wrapper for select.select because timeout is a positional arg (R(RtrtwR"((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt_select4sc Cst|jƒ r$t|jƒ r$gS|dkr6dn t|dƒ}g}t|jt|j|j|ƒ\}}}t|ƒ}t|ƒ}x|||BD]p}d}||kr½|t O}n||krÖ|t O}n|j |ƒ}|r˜|j |||j @fƒq˜q˜W|S(Ngi(R7RYRZRtmaxR!R_tTrueRXRDRERTtappendR2( RR"treadyR]R^RRR2RC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyR8s$ !      !N( R R R?RRRFRJR_R(((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRWs     tpollt PollSelectorcBsDeZdZd„Zdd„Zd„Zdd„Zdd„ZRS(s Poll-based selector cCs&tt|ƒjƒtjƒ|_dS(N(RReRRRdt_poll(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRSscCsrtt|ƒj|||ƒ}d}|t@r>|tjO}n|t@rX|tjO}n|jj|j |ƒ|S(Ni( RReRFRDRtPOLLINREtPOLLOUTRfR(RRR2R3RCt event_mask((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRFWs  cCs/tt|ƒj|ƒ}|jj|jƒ|S(N(RReRJRfR(RRRC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRJascCsM|dk r7|dkr!d}q7tj|dƒ}n|jj|ƒ}|S(sj Wrapper function for select.poll.poll() so that _syscall_wrapper can work with only seconds. ig@@N(RtmathtceilRfRd(RR"R.((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyt _wrap_pollfs    cCs§g}t|jtd|ƒ}x‚|D]z\}}d}|tj@rR|tO}n|tj@rm|tO}n|j|ƒ}|r%|j |||j @fƒq%q%W|S(NR"i( R!RlRaRRgRERhRDRTRbR2(RR"Rct fd_eventsRRiR2RC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRts  !N( R R R?RRRFRJRlR(((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyReQs    tepollt EpollSelectorcBsJeZdZd„Zd„Zdd„Zd„Zdd„Zd„Z RS(s Epoll-based selector cCs&tt|ƒjƒtjƒ|_dS(N(RRoRRRnt_epoll(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRˆscCs |jjƒS(N(RpR(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRŒscCsxtt|ƒj|||ƒ}d}|t@r>|tjO}n|t@rX|tjO}nt|j jt |j |ƒ|S(Ni( RRoRFRDRtEPOLLINREtEPOLLOUTR!RpR%R(RRR2R3RCt events_mask((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRFs  cCsMtt|ƒj|ƒ}yt|jjt|jƒWntk rHnX|S(N(RRoRJR!RpR%RR(RRRC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRJ™s  c Cs|dk rG|dkr!d}ntj|dƒd}t|ƒ}nd}tt|jƒdƒ}g}t|jj t d|d|ƒ}x‚|D]z\}}d}|t j @rÀ|t O}n|t j@rÛ|tO}n|j|ƒ}|r“|j|||j@fƒq“q“W|S( Nigg@@gü©ñÒMbP?gð¿iR"t maxevents(RRjRkR&R`R7R8R!RpRdRaRRqRERrRDRTRbR2( RR"t max_eventsRcRmRRiR2RC((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyR¢s*      !cCs$|jjƒtt|ƒjƒdS(N(RpRORRo(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyROÃs N( R R R?RRRRFRJRRO(((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRo†s   !tkqueuetKqueueSelectorcBsJeZdZd„Zd„Zdd„Zd„Zdd„Zd„Z RS(s Kqueue / Kevent-based selector cCs&tt|ƒjƒtjƒ|_dS(N(RRwRRRvt_kqueue(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRËscCs |jjƒS(N(RxR(R((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRÏscCs¶tt|ƒj|||ƒ}|t@rhtj|jtjtjƒ}t |j j t |gddƒn|t @r²tj|jtjtjƒ}t |j j t |gddƒn|S(Ni(RRwRFRDRtkeventRtKQ_FILTER_READt KQ_EV_ADDR!RxtcontrolR%REtKQ_FILTER_WRITE(RRR2R3RCRy((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRFÒs   "   "cCsætt|ƒj|ƒ}|jt@r}tj|jtjtj ƒ}y#t |j j t |gddƒWq}tk ryq}Xn|jt@râtj|jtjtj ƒ}y#t |j j t |gddƒWqâtk rÞqâXn|S(Ni(RRwRJR2RDRRyRRzt KQ_EV_DELETER!RxR|R%RRER}(RRRCRy((sF/usr/lib/python2.7/site-packages/pip/_vendor/urllib3/util/selectors.pyRJäs$   #    # c Cs9|dk rt|dƒ}nt|jƒd}i}t|jjtd||ƒ}xÑ|D]É}|j}|j }d}|t j kr–|t O}n|t j kr²|tO}n|j|ƒ} | r\| j|kró| || j@f|| jsF           8ˆ14BR