U ifH@sddlmZmZddlmZddlmZddlZddlZddl Z dZ dZ ddZ ed d d d d gZ de _e jdkrde j_de j_de j_de j_GdddeZGdddedZGdddeZGdddeZGdddeZeedrGd d!d!eZeed"rGd#d$d$eZeed%r6Gd&d'd'eZeed(rRGd)d*d*eZd*ekrdeZn:d$ekrveZn(d'ekreZnd!ekreZneZdS)+)ABCMetaabstractmethod) namedtuple)MappingNc Csft|tr|}ntd|dYnXdSN{!r} is not registered)r_fileobj_lookuprKeyErrorr)rrrrrr __getitem__Es  z_SelectorMapping.__getitem__cCs t|jjSr)iterrrr rrr__iter__Lsz_SelectorMapping.__iter__N)__name__ __module__ __qualname__rr!r&r(rrrrr<src@sjeZdZedddZeddZdddZeddd Zd d Zd d Z eddZ ddZ ddZ dS) BaseSelectorNcCstdSrNotImplementedErrorrrrrrrrregister_szBaseSelector.registercCstdSrr-)rrrrr unregistervszBaseSelector.unregistercCs||||||Sr)r1r0r/rrrmodifys zBaseSelector.modifycCstdSrr-)rtimeoutrrrselectszBaseSelector.selectcCsdSrrr rrrcloseszBaseSelector.closecCsL|}|dkrtdz ||WStk rFtd|dYnXdS)NzSelector is closedr#)get_map RuntimeErrorr%r)rrmappingrrrget_keys zBaseSelector.get_keycCstdSrr-r rrrr6szBaseSelector.get_mapcCs|Srrr rrr __enter__szBaseSelector.__enter__cGs |dSr)r5)rargsrrr__exit__szBaseSelector.__exit__)N)N)N) r)r*r+rr0r1r2r4r5r9r6r:r<rrrrr,Ps     r,) metaclassc@sPeZdZddZddZdddZdd Zdd d Zd d ZddZ ddZ dS)_BaseSelectorImplcCsi|_t||_dSr)rr_mapr rrrrsz_BaseSelectorImpl.__init__cCsNz t|WStk rH|jD]}|j|kr$|jYSq$YnXdSr)rr rvaluesrrrrkeyrrrr$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%rrrrrBrrrr0s  z_BaseSelectorImpl.registercCs@z|j||}Wn$tk r:td|dYnX|Sr")rpopr$r%rrArrrr1s z_BaseSelectorImpl.unregistercCsz|j||}Wn$tk r8td|dYnX||jkr^||||||}n"||jkr|j|d}||j|j <|S)Nr#)r) rr$r%rrr1r0r_replacerrErrrr2s     z_BaseSelectorImpl.modifycCs|jd|_dSr)rclearr?r rrrr5 s z_BaseSelectorImpl.closecCs|jSr)r?r rrrr6sz_BaseSelectorImpl.get_mapcCs(z |j|WStk r"YdSXdSr)rr%)rrrrr _key_from_fds  z_BaseSelectorImpl._key_from_fd)N)N) r)r*r+rr$r0r1r2r5r6rIrrrrr>s  r>cs\eZdZfddZd fdd ZfddZejdkrDdd d Zne j Zdd d Z Z S)SelectSelectorcstt|_t|_dSr)superrset_readers_writersr  __class__rrr%s zSelectSelector.__init__Ncs@t|||}|t@r&|j|j|t@r<|j|j|Sr)rKr0rCrMaddrrDrNrErOrrr0*s zSelectSelector.registercs,t|}|j|j|j|j|Sr)rKr1rMdiscardrrNrArOrrr12s zSelectSelector.unregisterZwin32cCs$t||||\}}}|||gfSr)r4)rrw_r3xrrr_select9szSelectSelector._selectc Cs|dkr dnt|d}g}z||j|jg|\}}}Wntk rP|YSXt|}t|}||BD]J}d}||kr|tO}||kr|tO}||}|rj| |||j @fqj|SNr) maxrWrMrNInterruptedErrorrLrCrDrIappendr) rr3readyrSrTrUrrrBrrrr4?s$   zSelectSelector.select)N)N)N) r)r*r+rr0r1sysplatformrWr4 __classcell__rrrOrrJ"s    rJcsZeZdZdZdZdZfddZd fdd ZfddZd fdd Z dd d Z Z S)_PollLikeSelectorNcst||_dSr)rKr _selector_clsrr rOrrr[s z_PollLikeSelector.__init__cslt|||}d}|t@r&||jO}|t@r8||jO}z|j|j|Wnt|YnX|SrX) rKr0rC _EVENT_READrD _EVENT_WRITErrr1)rrrrrBZ poller_eventsrOrrr0_s   z_PollLikeSelector.registercs8t|}z|j|jWntk r2YnX|Sr)rKr1rrOSErrorrArOrrr1ms  z_PollLikeSelector.unregistercsz|j||}Wn$tk r8t|ddYnXd}||jkrd}|t@r^||jO}|t@rp||jO}z|j |j |Wnt |YnXd}||j krd}|r|j||d}||j|j <|S)Nz is not registeredFrT)rr)rr$r%rrCrbrDrcrr2rrKr1rrG)rrrrrBZchangedZselector_eventsrOrrr2ws.      z_PollLikeSelector.modifycCs|dkrd}n|dkrd}nt|d}g}z|j|}Wntk rV|YSX|D]V\}}d}||j@r||tO}||j@r|tO}| |}|r\| |||j @fq\|S)Nr@@) mathceilrpollrZrbrDrcrCrIr[r)rr3r\ fd_event_listreventrrBrrrr4s(     z_PollLikeSelector.select)N)N)N) r)r*r+rarbrcrr0r1r2r4r_rrrOrr`Us  r`rhc@seZdZejZejZejZ dS) PollSelectorN) r)r*r+r4rhraPOLLINrbPOLLOUTrcrrrrrksrkepollcs@eZdZejZejZejZ ddZ dddZfddZ Z S) EpollSelectorcCs |jSrrr r rrrr szEpollSelector.filenoNc Cs|dkrd}n |dkrd}nt|dd}tt|jd}g}z|j||}Wntk rl|YSX|D]V\}}d}|tj @r|t O}|tj @r|t O}| |}|rr||||j@fqr|S)NrregMbP?r)rfrgrYrrrrhrZr4EPOLLINrDEPOLLOUTrCrIr[r) rr3max_evr\rirrjrrBrrrr4s*     zEpollSelector.selectcs|jtdSrrr5rKr rOrrr5s zEpollSelector.close)N) r)r*r+r4rnrarrrbrsrcr r5r_rrrOrros  rodevpollcs6eZdZejZejZejZ ddZ fddZ Z S)DevpollSelectorcCs |jSrrpr rrrr szDevpollSelector.filenocs|jtdSrrur rOrrr5s zDevpollSelector.close) r)r*r+r4rvrarlrbrmrcr r5r_rrrOrrws rwkqueuecsTeZdZfddZddZdfdd Zfdd Zdd d Zfd d ZZ S)KqueueSelectorcstt|_dSr)rKrr4rxrr rOrrrs zKqueueSelector.__init__cCs |jSrrpr rrrr szKqueueSelector.filenoNcst|||}z`|t@r@t|jtjtj}|j |gdd|t @rnt|jtj tj}|j |gddWnt |YnX|SrX) rKr0rCr4keventrKQ_FILTER_READZ KQ_EV_ADDrcontrolrDKQ_FILTER_WRITEr1)rrrrrBkevrOrrr0s    zKqueueSelector.registercst|}|jt@rVt|jtjtj}z|j |gddWnt k rTYnX|jt @rt|jtj tj}z|j |gddWnt k rYnX|SrX)rKr1rrCr4rzrr{Z KQ_EV_DELETErr|rdrDr})rrrBr~rOrrr1s$     zKqueueSelector.unregisterc Cs|dkr dnt|d}t|j}g}z|jd||}Wntk rP|YSX|D]Z}|j}|j}d}|tj kr||t O}|tj kr|t O}| |} | rV|| || j@fqV|SrX)rYrrrr|rZZidentfilterr4r{rCr}rDrIr[r) rr3rtr\Zkev_listr~rflagrrBrrrr4)s&     zKqueueSelector.selectcs|jtdSrrur rOrrr5?s zKqueueSelector.close)N)N) r)r*r+rr r0r1r4r5r_rrrOrrys    ry) abcrr collectionsrZcollections.abcrrfr4r]rCrDrr__doc__ version_inforrrrrr,r>rJr`hasattrrkrorwryglobalsZDefaultSelectorrrrrsJ   ~T3Z  .  M