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!/usr/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.unregisterwin32cCs$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) maxrYrNrOInterruptedErrorrMrDrErJappendr) rr4readyrUrVrWrrrCrrrr5@s$    zSelectSelector.select)N)N)N) r*r+r,rr1r2sysplatformrYr5 __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|SrZ) rLr1rD _EVENT_READrE _EVENT_WRITErrr2)rrrrrC 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&rrDrdrErerr3rrLr2rrH)rrrrrCchangedselector_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\rdrErerDrJr]r)rr4r^ fd_event_listreventrrCrrrr5s(      z_PollLikeSelector.select)N)N)N) r*r+r,rcrdrerr1r2r3r5rarrrPrrbVs  rbrmc@seZdZejZejZejZ dS) PollSelectorN) r*r+r,r5rmrcPOLLINrdPOLLOUTrerrrrrpsrpepollcs@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)NrrjgMbP?r)rkrlr[rr rrmr\r5EPOLLINrEEPOLLOUTrDrJr]r) rr4max_evr^rnrrorrCrrrr5s*      zEpollSelector.selectcs|jtdSrrr6rLr!rPrrr6s zEpollSelector.close)N) r*r+r,r5rsrcrwrdrxrer r6rarrrPrrts  rtdevpollcs6eZdZejZejZejZ ddZ fddZ Z S)DevpollSelectorcCs |jSrrur!rrrr szDevpollSelector.filenocs|jtdSrrzr!rPrrr6s zDevpollSelector.close) r*r+r,r5r{rcrqrdrrrer r6rarrrPrr|s r|kqueuecsTeZdZfddZddZdfdd Zfdd Zdd d Zfd d ZZ S)KqueueSelectorcstt|_dSr)rLrr5r}rr!rPrrrs zKqueueSelector.__init__cCs |jSrrur!rrrr szKqueueSelector.filenoNcst|||}z`|t@r@t|jtjtj}|j |gdd|t @rnt|jtj tj}|j |gddWnt |Yn0|SrZ) 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|SrZ)rLr2rrDr5rrrZ KQ_EV_DELETErrrgrEr)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)r[rr rrr\identfilterr5rrDrrErJr]r) rr4ryr^Zkev_listrrflagrrCrrrr5*s&     zKqueueSelector.selectcs|jtdSrrzr!rPrrr6Cs zKqueueSelector.close)N)N) r*r+r,rr r1r2r5r6rarrrPrr~s    r~cCsZtt|d}|durdSz(|}|dkr4|dn|WdStyTYdS0dS)NFrmrT)getattrr5rmr6rg)methodr selector_objrrr_can_useHs   r) abcrr collectionsrcollections.abcrrkr5r_rDrErr__doc__ version_inforrrrrr-r?rKrbhasattrrprtr|r~rDefaultSelectorrrrrsL   ~T3Z  .  M