a DOgPL@sddlmZmZddlmZddlmZddlZddlZddl Z dZ dZ ddZ ed gd Z d e _e jd krd e j_de j_de j_de j_GdddeZGdddedZGdddeZGdddeZGdddeZeedrGdddeZeedrGd d!d!eZeed"r2Gd#d$d$eZeed%rNGd&d'd'eZd(d)Zed%rfeZn4edrveZn$ed"reZnedreZneZdS)*)ABCMetaabstractmethod) namedtuple)MappingNc Csdt|tr|}n:zt|}Wn(tttfyHtd|dYn0|dkr`td||S)NzInvalid file object: {!r}rzInvalid file descriptor: {}) isinstanceintfilenoAttributeError TypeError ValueErrorformat)fileobjfdr./opt/alt/python39/lib64/python3.9/selectors.py_fileobj_to_fds r SelectorKey)rreventsdatazSelectorKey(fileobj, fd, events, data) Object used to associate a file object to its backing file descriptor, selected event mask, and attached data. )zFile object registered.zUnderlying file descriptor.z3Events that must be waited for on this file object.zzOptional opaque data associated to this file object. For example, this could be used to store a per-client session ID.c@s,eZdZddZddZddZddZd S) _SelectorMappingcCs ||_dSN) _selector)selfselectorrrr__init__@sz_SelectorMapping.__init__cCs t|jjSr)lenr _fd_to_keyrrrr__len__Csz_SelectorMapping.__len__cCsBz|j|}|jj|WSty<td|dYn0dSN{!r} is not registered)r_fileobj_lookupr KeyErrorr)rrrrrr __getitem__Fs   z_SelectorMapping.__getitem__cCs t|jjSr)iterrr r!rrr__iter__Msz_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 unregisterwszBaseSelector.unregistercCs||||||Sr)r2r1r0rrrmodifys zBaseSelector.modifycCstdSrr.)rtimeoutrrrselectszBaseSelector.selectcCsdSrrr!rrrcloseszBaseSelector.closecCsJ|}|durtdz ||WStyDtd|dYn0dS)NzSelector is closedr$)get_map RuntimeErrorr&r)rrmappingrrrget_keys  zBaseSelector.get_keycCstdSrr.r!rrrr7szBaseSelector.get_mapcCs|Srrr!rrr __enter__szBaseSelector.__enter__cGs |dSr)r6)rargsrrr__exit__szBaseSelector.__exit__)N)N)N) r*r+r,rr1r2r3r5r6r:r7r;r=rrrrr-Qs     r-) metaclassc@sPeZdZddZddZdddZdd Zdd d Zd d ZddZ ddZ dS)_BaseSelectorImplcCsi|_t||_dSr)r r_mapr!rrrrsz_BaseSelectorImpl.__init__cCsLz t|WStyF|jD]}|j|ur"|jYSq"Yn0dSr)rr r valuesrrrrkeyrrrr%s    z!_BaseSelectorImpl._fileobj_lookupNcCsb|r|ttB@r td|t|||||}|j|jvrRtd||j||j|j<|S)NzInvalid events: {!r}z"{!r} (FD {}) is already registered) EVENT_READ EVENT_WRITEr rrr%rr r&rrrrrCrrrr1s  z_BaseSelectorImpl.registercCs>z|j||}Wn"ty8td|dYn0|Sr#)r popr%r&rrBrrrr2s  z_BaseSelectorImpl.unregistercCsz|j||}Wn"ty6td|dYn0||jkr\||||||}n"||jkr~|j|d}||j|j <|S)Nr$)r) r r%r&rrr2r1r_replacerrFrrrr3s      z_BaseSelectorImpl.modifycCs|jd|_dSr)r clearr@r!rrrr6 s z_BaseSelectorImpl.closecCs|jSr)r@r!rrrr7sz_BaseSelectorImpl.get_mapcCs&z |j|WSty YdS0dSr)r r&)rrrrr _key_from_fds   z_BaseSelectorImpl._key_from_fd)N)N) r*r+r,rr%r1r2r3r6r7rJrrrrr?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)rLr1rDrNaddrrErOrFrPrrr1+s zSelectSelector.registercs,t|}|j|j|j|j|Sr)rLr2rNdiscardrrOrBrPrrr23s zSelectSelector.unregisterZwin32cCs$t||||\}}}|||gfSr)r5)rrw_r4xrrr_select:szSelectSelector._selectc Cs|dur dnt|d}g}z||j|jg|\}}}WntyN|YS0t|}t|}||BD]J}d}||vr|tO}||vr|tO}||}|rh| |||j @fqh|SNr) maxrXrNrOInterruptedErrorrMrDrErJappendr) rr4readyrTrUrVrrrCrrrr5@s$    zSelectSelector.select)N)N)N) r*r+r,rr1r2sysplatformrXr5 __classcell__rrrPrrK#s    rKcsZeZdZdZdZdZfddZd fdd ZfddZd fdd Z dd d Z Z S)_PollLikeSelectorNcst||_dSr)rLr _selector_clsrr!rPrrr\s z_PollLikeSelector.__init__cslt|||}d}|t@r&||jO}|t@r8||jO}z|j|j|Wnt|Yn0|SrY) rLr1rD _EVENT_READrE _EVENT_WRITErrr2)rrrrrCZ poller_eventsrPrrr1`s   z_PollLikeSelector.registercs6t|}z|j|jWnty0Yn0|Sr)rLr2rrOSErrorrBrPrrr2ns   z_PollLikeSelector.unregistercsz|j||}Wn"ty6t|ddYn0d}||jkrd}|t@r\||jO}|t@rn||jO}z|j |j |Wnt |Yn0d}||j krd}|r|j||d}||j|j <|S)Nz is not registeredFrT)rr)r r%r&rrDrcrErdrr3rrLr2rrH)rrrrrCZchangedZselector_eventsrPrrr3xs.       z_PollLikeSelector.modifycCs|durd}n|dkrd}nt|d}g}z|j|}WntyT|YS0|D]V\}}d}||j@rz|tO}||j@r|tO}| |}|rZ| |||j @fqZ|S)Nr@@) mathceilrpollr[rcrErdrDrJr\r)rr4r] fd_event_listreventrrCrrrr5s(      z_PollLikeSelector.select)N)N)N) r*r+r,rbrcrdrr1r2r3r5r`rrrPrraVs  raric@seZdZejZejZejZ dS) PollSelectorN) r*r+r,r5rirbPOLLINrcPOLLOUTrdrrrrrlsrlepollcs@eZdZejZejZejZ ddZ dddZfddZ Z S) EpollSelectorcCs |jSrrr r!rrrr szEpollSelector.filenoNc Cs|durd}n |dkrd}nt|dd}tt|jd}g}z|j||}Wntyj|YS0|D]V\}}d}|tj @r|t O}|tj @r|t O}| |}|rp||||j@fqp|S)NrrfgMbP?r)rgrhrZrr rrir[r5EPOLLINrEEPOLLOUTrDrJr\r) rr4max_evr]rjrrkrrCrrrr5s*      zEpollSelector.selectcs|jtdSrrr6rLr!rPrrr6s zEpollSelector.close)N) r*r+r,r5rorbrsrcrtrdr r6r`rrrPrrps  rpdevpollcs6eZdZejZejZejZ ddZ fddZ Z S)DevpollSelectorcCs |jSrrqr!rrrr szDevpollSelector.filenocs|jtdSrrvr!rPrrr6s zDevpollSelector.close) r*r+r,r5rwrbrmrcrnrdr r6r`rrrPrrxs rxkqueuecsTeZdZfddZddZdfdd Zfdd Zdd d Zfd d ZZ S)KqueueSelectorcstt|_dSr)rLrr5ryrr!rPrrrs zKqueueSelector.__init__cCs |jSrrqr!rrrr szKqueueSelector.filenoNcst|||}z`|t@r@t|jtjtj}|j |gdd|t @rnt|jtj tj}|j |gddWnt |Yn0|SrY) rLr1rDr5keventrKQ_FILTER_READZ KQ_EV_ADDrcontrolrEKQ_FILTER_WRITEr2)rrrrrCkevrPrrr1s    zKqueueSelector.registercst|}|jt@rTt|jtjtj}z|j |gddWnt yRYn0|jt @rt|jtj tj}z|j |gddWnt yYn0|SrY)rLr2rrDr5r{rr|Z KQ_EV_DELETErr}rerEr~)rrrCrrPrrr2s$       zKqueueSelector.unregisterc Cs|dur dnt|d}tt|jd}g}z|jd||}WntyT|YS0|D]Z}|j}|j}d}|tj kr|t O}|tj kr|t O}| |} | rZ|| || j@fqZ|S)Nrr)rZrr rr}r[Zidentfilterr5r|rDr~rErJr\r) rr4rur]Zkev_listrrflagrrCrrrr5*s&     zKqueueSelector.selectcs|jtdSrrvr!rPrrr6Cs zKqueueSelector.close)N)N) r*r+r,rr r1r2r5r6r`rrrPrrzs    rzcCsZtt|d}|durdSz(|}|dkr4|dn|WdStyTYdS0dS)NFrirT)getattrr5rir6re)methodrZ selector_objrrr_can_useHs   r) abcrr collectionsrcollections.abcrrgr5r^rDrErr__doc__ version_inforrrrrr-r?rKrahasattrrlrprxrzrZDefaultSelectorrrrrsL   ~T3Z  .  M