o =?hPL@s ddlmZmZddlmZddlmZddlZddlZddl Z dZ dZ ddZ ed gd Z d e _e jd krHd e j_de j_de j_de j_GdddeZGdddedZGdddeZGdddeZGdddeZeedr~GdddeZeedrGd d!d!eZeed"rGd#d$d$eZeed%rGd&d'd'eZd(d)Zed%reZdSedreZdSed"reZdSedreZdSeZdS)*)ABCMetaabstractmethod) namedtuple)MappingNc Csb t|tr |}nzt|}Wntttfy#td|dw|dkr/td||S)NzInvalid file object: {!r}rzInvalid file descriptor: {}) isinstanceintfilenoAttributeError TypeError ValueErrorformat)fileobjfdr0/opt/alt/python310/lib64/python3.10/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.eZdZ ddZddZddZddZd S) _SelectorMappingcCs ||_dSN) _selector)selfselectorrrr__init__@ z_SelectorMapping.__init__cC t|jjSr)lenr _fd_to_keyrrrr__len__C z_SelectorMapping.__len__cCs:z |j|}|jj|WStytd|dwN{!r} is not registered)r_fileobj_lookupr"KeyErrorr)rrrrrr __getitem__Fs   z_SelectorMapping.__getitem__cCr r)iterrr"r#rrr__iter__Mr%z_SelectorMapping.__iter__N)__name__ __module__ __qualname__rr$r*r,rrrrr=s  rc@sleZdZ edddZeddZdddZeddd Zd d Zd d Z eddZ ddZ ddZ dS) BaseSelectorNcC trNotImplementedErrorrrrrrrrregister`szBaseSelector.registercCr1rr2)rrrrr unregisterwzBaseSelector.unregistercCs ||||||Sr)r6r5r4rrrmodifys zBaseSelector.modifycCr1rr2)rtimeoutrrrselectr7zBaseSelector.selectcCs dSrrr#rrrcloseszBaseSelector.closecCsD |}|dur tdz||WSty!td|dw)NzSelector is closedr')get_map RuntimeErrorr)r)rrmappingrrrget_keys  zBaseSelector.get_keycCr1rr2r#rrrr<szBaseSelector.get_mapcCs|Srrr#rrr __enter__szBaseSelector.__enter__cGs |dSr)r;)rargsrrr__exit__r%zBaseSelector.__exit__r) r-r.r/rr5r6r8r:r;r?r<r@rBrrrrr0Qs      r0) metaclassc@sReZdZ ddZddZdddZdd Zdd d Zd d ZddZ ddZ dS)_BaseSelectorImplcCsi|_t||_dSr)r"r_mapr#rrrrsz_BaseSelectorImpl.__init__cCsF zt|WSty"|jD]}|j|ur |jYSqwr)rr r"valuesrrrrkeyrrrr(s   z!_BaseSelectorImpl._fileobj_lookupNcCsb|r |ttB@rtd|t|||||}|j|jvr)td||j||j|j<|S)NzInvalid events: {!r}z"{!r} (FD {}) is already registered) EVENT_READ EVENT_WRITEr rrr(rr"r)rrrrrHrrrr5s   z_BaseSelectorImpl.registercCs8z |j||}W|Stytd|dwr&)r"popr(r)rrGrrrr6s  z_BaseSelectorImpl.unregistercCsz |j||}Wntytd|dw||jkr-||||||}|S||jkr>|j|d}||j|j <|S)Nr')r) r"r(r)rrr6r5r_replacerrKrrrr8s     z_BaseSelectorImpl.modifycCs|jd|_dSr)r"clearrEr#rrrr; s  z_BaseSelectorImpl.closecCs|jSr)rEr#rrrr<sz_BaseSelectorImpl.get_mapcCs$ z|j|WStyYdSwr)r"r))rrrrr _key_from_fds   z_BaseSelectorImpl._key_from_fdr) r-r.r/rr(r5r6r8r;r<rOrrrrrDs   rDcs^eZdZ fddZd fdd ZfddZejdkr#d d d Zne j Zd d 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)rQr5rIrSaddrrJrTrKrUrrr5+s zSelectSelector.registercs,t|}|j|j|j|j|Sr)rQr6rSdiscardrrTrGrUrrr63s zSelectSelector.unregisterZwin32cCs$t||||\}}}|||gfSr)r:)rrw_r9xrrr_select:szSelectSelector._selectc Cs|durdnt|d}g}z||j|jg|\}}}Wn ty'|YSwt|}t|}||BD]%}d}||vr@|tO}||vrH|tO}||}|rY| |||j @fq4|SNr) maxr]rSrTInterruptedErrorrRrIrJrOappendr) rr9readyrYrZr[rrrHrrrr:@s(   zSelectSelector.selectr) r-r.r/rr5r6sysplatformr]r: __classcell__rrrUrrP#s    rPcs\eZdZ dZdZdZfddZd fdd ZfddZd fdd Z d d d Z Z S) _PollLikeSelectorNcst||_dSr)rQr _selector_clsrr#rUrrr\ z_PollLikeSelector.__init__csdt|||}d}|t@r||jO}|t@r||jO}z |j|j|W|St|r^) rQr5rI _EVENT_READrJ _EVENT_WRITErrr6)rrrrrHZ poller_eventsrUrrr5`s   z_PollLikeSelector.registercs6t|}z |j|jW|StyY|Swr)rQr6rrOSErrorrGrUrrr6ns  z_PollLikeSelector.unregistercsz |j||}Wntyt|ddwd}||jkrLd}|t@r,||jO}|t@r5||jO}z |j |j |Wn t |d}||j krSd}|rb|j||d}||j|j <|S)Nz is not registeredFrT)rr)r"r(r)rrIrirJrjrr8rrQr6rrM)rrrrrHZchangedZselector_eventsrUrrr8xs0       z_PollLikeSelector.modifycCs|durd}n|dkrd}nt|d}g}z|j|}Wn ty*|YSw|D]+\}}d}||j@r=|tO}||j@rG|tO}| |}|rX| |||j @fq-|S)Nr@@) mathceilrpollr`rirJrjrIrOrar)rr9rb fd_event_listreventrrHrrrr:s,     z_PollLikeSelector.selectr) r-r.r/rgrirjrr5r6r8r:rerrrUrrfVs   rfroc@s eZdZ ejZejZejZ dS) PollSelectorN) r-r.r/r:rorgPOLLINriPOLLOUTrjrrrrrrs  rrepollcsBeZdZ ejZejZejZ ddZ dddZfddZ Z S) EpollSelectorcC |jSrrr r#rrrr rzEpollSelector.filenoNc Cs|durd}n|dkrd}n t|dd}tt|jd}g}z |j||}Wn ty5|YSw|D]+\}}d}|tj @rH|t O}|tj @rR|t O}| |}|rc||||j@fq8|S)NrrlgMbP?r)rmrnr_r!r"rror`r:EPOLLINrJEPOLLOUTrIrOrar) rr9max_evrbrprrqrrHrrrr:s.     zEpollSelector.selectc|jtdSrrr;rQr#rUrrr;rhzEpollSelector.closer) r-r.r/r:rurgrzrir{rjr r;rerrrUrrvs  rvdevpollcs8eZdZ ejZejZejZ ddZ fddZ Z S)DevpollSelectorcCrwrrxr#rrrr rzDevpollSelector.filenocr}rr~r#rUrrr;rhzDevpollSelector.close) r-r.r/r:rrgrsrirtrjr r;rerrrUrrsrkqueuecsVeZdZ fddZddZdfdd Zfdd Zdd d Zfd d ZZ S)KqueueSelectorcstt|_dSr)rQrr:rrr#rUrrrrhzKqueueSelector.__init__cCrwrrxr#rrrr rzKqueueSelector.filenoNcst|||}z4|t@r t|jtjtj}|j |gdd|t @r:t|jtj tj}|j |gddW|SW|St |r^) rQr5rIr:keventrKQ_FILTER_READZ KQ_EV_ADDrcontrolrJKQ_FILTER_WRITEr6)rrrrrHkevrUrrr5s$   zKqueueSelector.registercst|}|jt@r*t|jtjtj}z |j |gddWn t y)Ynw|jt @rPt|jtj tj}z |j |gddW|St yOY|Sw|Sr^)rQr6rrIr:rrrZ KQ_EV_DELETErrrkrJr)rrrHrrUrrr6s,       zKqueueSelector.unregisterc Cs|durdnt|d}tt|jd}g}z |jd||}Wn ty*|YSw|D]-}|j}|j}d}|tj kr@|t O}|tj krI|t O}| |} | rZ|| || j@fq-|S)Nrr)r_r!r"rrr`Zidentfilterr:rrIrrJrOrar) rr9r|rbZkev_listrrflagrrHrrrr:*s*    zKqueueSelector.selectcr}rr~r#rUrrr;CrhzKqueueSelector.closer) r-r.r/rr r5r6r:r;rerrrUrrs   rcCs\ tt|d}|dur dSz|}|dkr|dWdS|WdSty-YdSw)NFrorT)getattrr:ror;rk)methodrZ selector_objrrr_can_useHs   r) abcrr collectionsrZcollections.abcrrmr:rcrIrJrr__doc__ version_inforrrrrr0rDrPrfhasattrrrrvrrrZDefaultSelectorrrrrsP   ~T3 Z  . M