eaiovnaovbqoebvqoeavibavo B  fH@sdZddlmZmZddlmZddlmZddlZddl Z ddl Z dZ dZ dd Z ed d d d dgZde_e jdkrdej_dej_dej_dej_GdddeZGdddedZGdddeZGdddeZGdddeZee d rGd!d"d"eZee d#r Gd$d%d%eZee d&r 0, this specifies the maximum wait time, in seconds if timeout <= 0, the select() call won't block, and will report the currently ready file objects if timeout is None, select() will block until a monitored file object becomes ready Returns: list of (key, events) for ready file objects `events` is a bitwise mask of EVENT_READ|EVENT_WRITE N)r*)rtimeoutrrrselectszBaseSelector.selectcCsdS)zmClose the selector. This must be called to make sure that any underlying resource is freed. Nr)rrrrcloseszBaseSelector.closecCsJ|}|dkrtdy||Stk rDtd|dYnXdS)zzReturn the key associated to a registered file object. Returns: SelectorKey for this file object NzSelector is closedz{!r} is not registered)get_map RuntimeErrorr!r)rrmappingrrrget_keyszBaseSelector.get_keycCstdS)z2Return a mapping of file objects to selector keys.N)r*)rrrrr1szBaseSelector.get_mapcCs|S)Nr)rrrr __enter__szBaseSelector.__enter__cGs |dS)N)r0)rargsrrr__exit__szBaseSelector.__exit__)N)N)N)r%r&r'r(rr+r,r-r/r0r4r1r5r7rrrrr)Ps      r)) metaclassc@sTeZdZdZddZddZdddZd d Zdd d Zd dZ ddZ ddZ dS)_BaseSelectorImplzBase selector implementation.cCsi|_t||_dS)N)rr_map)rrrrrsz_BaseSelectorImpl.__init__cCsHyt|Stk rBx"|jD]}|j|kr$|jSq$WYnXdS)alReturn 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. This is 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)rr rvaluesrr)rrkeyrrrr s   z!_BaseSelectorImpl._fileobj_lookupNcCsb|r|ttB@r td|t|||||}|j|jkrRtd||j||j|j<|S)NzInvalid events: {!r}z"{!r} (FD {}) is already registered) EVENT_READ EVENT_WRITEr rrr rrr!)rrrrr<rrrr+s   z_BaseSelectorImpl.registercCs@y|j||}Wn$tk r:td|dYnX|S)Nz{!r} is not registered)rpopr r!r)rrr<rrrr,s z_BaseSelectorImpl.unregistercCsy|j||}Wn$tk r8td|dYnX||jkr^||||||}n"||jkr|j|d}||j|j <|S)Nz{!r} is not registered)r) rr r!rrr,r+r_replacer)rrrrr<rrrr-s     z_BaseSelectorImpl.modifycCs|jd|_dS)N)rclearr:)rrrrr0 s z_BaseSelectorImpl.closecCs|jS)N)r:)rrrrr1sz_BaseSelectorImpl.get_mapcCs$y |j|Stk rdSXdS)zReturn the key associated to a given file descriptor. Parameters: fd -- file descriptor Returns: corresponding key, or None if not found N)rr!)rrrrr _key_from_fds  z_BaseSelectorImpl._key_from_fd)N)N) r%r&r'r(rr r+r,r-r0r1rBrrrrr9s  r9cs`eZdZdZfddZdfdd ZfddZejd krHdd d Z ne j Z dd d Z Z S)SelectSelectorzSelect-based selector.cstt|_t|_dS)N)superrset_readers_writers)r) __class__rrr%s zSelectSelector.__init__Ncs@t|||}|t@r&|j|j|t@r<|j|j|S)N)rDr+r=rFaddrr>rG)rrrrr<)rHrrr+*s zSelectSelector.registercs,t|}|j|j|j|j|S)N)rDr,rFdiscardrrG)rrr<)rHrrr,2s zSelectSelector.unregisterZwin32cCs$t||||\}}}|||gfS)N)r/)rrw_r.xrrr_select9szSelectSelector._selectc Cs|dkr dnt|d}g}y||j|jg|\}}}Wntk rL|SXt|}t|}xV||BD]J}d}||kr|tO}||kr|tO}||}|rh| |||j @fqhW|S)Nr) maxrOrFrGInterruptedErrorrEr=r>rBappendr) rr.readyrKrLrMrrr<rrrr/?s$ zSelectSelector.select)N)N)N) r%r&r'r(rr+r,sysplatformrOr/ __classcell__rr)rHrrC"s    rCcs^eZdZdZdZdZdZfddZd fdd ZfddZ dfd d Z dd d Z Z S)_PollLikeSelectorz _EVENT_WRITErrr,)rrrrr<Z poller_events)rHrrr+_s   z_PollLikeSelector.registercs8t|}y|j|jWntk r2YnX|S)N)rDr,rrOSError)rrr<)rHrrr,ms  z_PollLikeSelector.unregistercsy|j||}Wn$tk r8t|ddYnXd}||jkrd}|t@r^||jO}|t@rp||jO}y|j |j |Wnt |YnXd}||j krd}|r|j||d}||j|j <|S)Nz is not registeredFrT)rr)rr r!rr=rYr>rZrr-rrDr,rr@)rrrrr<ZchangedZselector_events)rHrrr-ws.      z_PollLikeSelector.modifycCs|dkrd}n|dkrd}nt|d}g}y|j|}Wntk rR|SXx^|D]V\}}d}||j@rz|tO}||j@r|tO}| |}|rZ| |||j @fqZW|S)Nrg@@) mathceilrpollrQrYr>rZr=rBrRr)rr.rS fd_event_listreventrr<rrrr/s(   z_PollLikeSelector.select)N)N)N) r%r&r'r(rXrYrZrr+r,r-r/rVrr)rHrrWUs  rWr^c@s"eZdZdZejZejZej Z dS) PollSelectorzPoll-based selector.N) r%r&r'r(r/r^rXPOLLINrYPOLLOUTrZrrrrrasraepollcsDeZdZdZejZejZej Z ddZ d ddZfddZ Z S) EpollSelectorzEpoll-based selector.cCs |jS)N)rr )rrrrr szEpollSelector.filenoNc Cs|dkrd}n |dkrd}nt|dd}tt|jd}g}y|j||}Wntk rh|SXx^|D]V\}}d}|tj @r|t O}|tj @r|t O}| |}|rp||||j@fqpW|S)Nrg@@gMbP?r)r\r]rPrrrr^rQr/EPOLLINr>EPOLLOUTr=rBrRr) rr.max_evrSr_rr`rr<rrrr/s*   zEpollSelector.selectcs|jtdS)N)rr0rD)r)rHrrr0s zEpollSelector.close)N)r%r&r'r(r/rdrXrgrYrhrZr r0rVrr)rHrres redevpollcs:eZdZdZejZejZej Z ddZ fddZ Z S)DevpollSelectorzSolaris /dev/poll selector.cCs |jS)N)rr )rrrrr szDevpollSelector.filenocs|jtdS)N)rr0rD)r)rHrrr0s zDevpollSelector.close)r%r&r'r(r/rjrXrbrYrcrZr r0rVrr)rHrrks rkkqueuecsXeZdZdZfddZddZdfdd Zfd d Zdd d Zfd dZ Z S)KqueueSelectorzKqueue-based selector.cstt|_dS)N)rDrr/rlr)r)rHrrrs zKqueueSelector.__init__cCs |jS)N)rr )rrrrr szKqueueSelector.filenoNcst|||}y`|t@r@t|jtjtj}|j |gdd|t @rnt|jtj tj}|j |gddWnt |YnX|S)Nr) rDr+r=r/keventrKQ_FILTER_READZ KQ_EV_ADDrcontrolr>KQ_FILTER_WRITEr,)rrrrr<kev)rHrrr+s   zKqueueSelector.registercst|}|jt@rVt|jtjtj}y|j |gddWnt k rTYnX|jt @rt|jtj tj}y|j |gddWnt k rYnX|S)Nr)rDr,rr=r/rnrroZ KQ_EV_DELETErrpr[r>rq)rrr<rr)rHrrr,s      zKqueueSelector.unregisterc Cs|dkr dnt|d}t|j}g}y|jd||}Wntk rL|SXxb|D]Z}|j}|j}d}|tj krz|t O}|tj kr|t O}| |} | rT|| || j@fqTW|S)Nr)rPrrrrprQZidentfilterr/ror=rqr>rBrRr) rr.rirSZkev_listrrrflagrr<rrrr/)s&     zKqueueSelector.selectcs|jtdS)N)rr0rD)r)rHrrr0?s zKqueueSelector.close)N)N) r%r&r'r(rr r+r,r/r0rVrr)rHrrms   rm) r(abcrr collectionsrZcollections.abcrr\r/rTr=r>rr version_inforrrrrr)r9rCrWhasattrrarerkrmglobalsZDefaultSelectorrrrrsL   ~T3Z  .  M