Ë ‚Ö¦i×Lãót—dZddlmZmZddlmZddlmZddlZddl Z ddl Z dZ dZ d„Z ed gd ¢«Zd e_d ej_d ej _dej"_dej$_Gd„de«ZGd„de¬«ZGd„de«ZGd„de«ZGd„de«Zee d«r Gd„de«Zee d«r Gd„d e«Zee d!«r Gd"„d#e«Zee d$«r Gd%„d&e«Zd'„Zed$«reZyed«reZyed!«reZyed«reZyeZy)(z|Selectors module. This module allows high-level and efficient I/O multiplexing, built upon the `select` module primitives. é)ÚABCMetaÚabstractmethod)Ú namedtuple)ÚMappingNéécó—t|t«r|}n t|j««}|dkrt dj |««‚|S#ttt f$rt dj |««d‚wxYw)zÕReturn a file descriptor from a file object. Parameters: fileobj -- file object or file descriptor Returns: corresponding file descriptor Raises: ValueError if the object is invalid zInvalid file object: {!r}NrzInvalid file descriptor: {})Ú isinstanceÚintÚfilenoÚAttributeErrorÚ TypeErrorÚ ValueErrorÚformat)ÚfileobjÚfds ú"/usr/lib64/python3.12/selectors.pyÚ_fileobj_to_fdrs„€ô�'œ3ÔØ ‰ð ?Ü�W—^‘^Ó%Ó&ˆBð ˆA‚vÜÐ6×=Ñ=¸bÓAÓBÐBØ €Iøô ¤ ¬:Ð6ò ?Üð$ß$*¡F¨7£Oó5Ø:>ð ?ð ?ús •AÁ0A?Ú SelectorKey)rrÚeventsÚdatazŸSelectorKey(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.zvOptional opaque data associated to this file object. For example, this could be used to store a per-client session ID.có(—eZdZdZd„Zd„Zd„Zd„Zy)Ú_SelectorMappingz)Mapping of file objects to selector keys.có—||_y©N)Ú _selector)ÚselfÚselectors rÚ__init__z_SelectorMapping.__init__?s €Ø!ˆ�ócó@—t|jj«Sr)ÚlenrÚ _fd_to_key©rs rÚ__len__z_SelectorMapping.__len__Bs€Ü�4—>‘>×,Ñ,Ó-Ð-r có¼— |jj|«}|jj|S#t$rtdj |««d‚wxYw©Nú{!r} is not registered)rÚ_fileobj_lookupr#ÚKeyErrorr)rrrs rÚ __getitem__z_SelectorMapping.__getitem__Es[€ð OØ—‘×/Ñ/°Ó8ˆBØ—>‘>×,Ñ,¨RÑ0Ð 0øÜò OÜÐ3×:Ñ:¸7ÓCÓDÈ$Ð Nð Oús ‚36¶%Acó@—t|jj«Sr)Úiterrr#r$s rÚ__iter__z_SelectorMapping.__iter__Ls€Ü�D—N‘N×-Ñ-Ó.Ð.r N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr%r+r.©r rrr<s„Ù3ò"ò.òOó/r rcót—eZdZdZed d„«Zed„«Zd d„Zed d„«Zd„Z d„Z ed „«Z d „Z d „Z y) Ú BaseSelectora-Selector abstract base class. A selector supports registering file objects to be monitored for specific I/O events. A file object is a file descriptor or any object with a `fileno()` method. An arbitrary object can be attached to the file object, which can be used for example to store context information, a callback, etc. A selector can use various implementations (select(), poll(), epoll()...) depending on the platform. The default `Selector` class uses the most efficient implementation on the current platform. Ncó—t‚)a3Register a file object. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: ValueError if events is invalid KeyError if fileobj is already registered OSError if fileobj is closed or otherwise is unacceptable to the underlying system call (if a system call is made) Note: OSError may or may not be raised ©ÚNotImplementedError©rrrrs rÚregisterzBaseSelector.register_s €ô*"Ð!r có—t‚)ajUnregister a file object. Parameters: fileobj -- file object or file descriptor Returns: SelectorKey instance Raises: KeyError if fileobj is not registered Note: If fileobj is registered but has since been closed this does *not* raise OSError (even if the wrapped syscall does) r7)rrs rÚ unregisterzBaseSelector.unregistervó €ô""Ð!r cóJ—|j|«|j|||«S)ayChange a registered file object monitored events or attached data. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: Anything that unregister() or register() raises )r<r:r9s rÚmodifyzBaseSelector.modify‰s#€ð �‰˜Ô Ø�}‰}˜W f¨dÓ3Ð3r có—t‚)aqPerform the actual selection, until some monitored file objects are ready or a timeout expires. Parameters: timeout -- if timeout > 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 r7)rÚtimeouts rÚselectzBaseSelector.selectšr=r có—y)zmClose the selector. This must be called to make sure that any underlying resource is freed. Nr3r$s rÚclosezBaseSelector.close­s€ð r có˜—|j«}|€ td«‚ ||S#t$rtdj|««d‚wxYw)zzReturn the key associated to a registered file object. Returns: SelectorKey for this file object NzSelector is closedr()Úget_mapÚ RuntimeErrorr*r)rrÚmappings rÚget_keyzBaseSelector.get_key´s[€ð —,‘,“.ˆØ ˆ?ÜÐ3Ó4Ð 4ð Oؘ7Ñ#Ð #øÜò OÜÐ3×:Ñ:¸7ÓCÓDÈ$Ð Nð Oús Ÿ$¤%A có—t‚)z2Return a mapping of file objects to selector keys.r7r$s rrFzBaseSelector.get_mapÂs €ô"Ð!r có—|Srr3r$s rÚ __enter__zBaseSelector.__enter__Çs€Øˆ r có$—|j«yr)rD)rÚargss rÚ__exit__zBaseSelector.__exit__Ês €Ø � ‰ � r r)r/r0r1r2rr:r<r?rBrDrIrFrLrOr3r rr5r5Psq„ñ ðò"óð"ð,ñ"óð"ó$4ð"ò"óð"ò$ ò Oðñ"óð"òór r5)Ú metaclasscóD—eZdZdZd„Zd„Zd d„Zd„Zd d„Zd„Z d „Z d „Z y) Ú_BaseSelectorImplzBase selector implementation.có2—i|_t|«|_yr)r#rÚ_mapr$s rrz_BaseSelectorImpl.__init__Ñs€àˆŒä$ TÓ*ˆ� r có°— t|«S#t$r?|jj«D] }|j|usŒ|j ccYS‚wxYw)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. )rrr#Úvaluesrr©rrÚkeys rr)z!_BaseSelectorImpl._fileobj_lookup×sR€ð Ü! 'Ó*Ð *øÜò à—‘×-Ñ-Ö/�Ø—;‘; 'Ò)ØŸ6™6”Mð0ð ð  ús‚ �4AÁAÁANcóF—|r|ttzzrtdj|««‚t ||j |«||«}|j |jvr%tdj||j ««‚||j|j <|S)NzInvalid events: {!r}z"{!r} (FD {}) is already registered) Ú EVENT_READÚ EVENT_WRITErrrr)rr#r*©rrrrrXs rr:z_BaseSelectorImpl.registerês�€Ù˜F¤z´KÑ'?Ð%@Ò@ÜÐ3×:Ñ:¸6ÓBÓCÐ Cä˜' 4×#7Ñ#7¸Ó#@À&È$ÓOˆà �6‰6�T—_‘_Ñ $ÜÐ?ß"™F 7¨C¯F©FÓ3ó5ð 5ð#&ˆ�‰˜Ÿ™Ñ؈ r có¬— |jj|j|««}|S#t$rtdj |««d‚wxYwr')r#Úpopr)r*rrWs rr<z_BaseSelectorImpl.unregister÷sZ€ð OØ—/‘/×%Ñ% d×&:Ñ&:¸7Ó&CÓDˆCðˆ øôò OÜÐ3×:Ñ:¸7ÓCÓDÈ$Ð Nð Oús ‚*.®%Acór— |j|j|«}||jk7r&|j |«|j |||«}|S||jk7r+|j|¬«}||j|j<|S#t$rtdj|««d‚wxYw)Nr()r) r#r)r*rrr<r:rÚ_replacerr\s rr?z_BaseSelectorImpl.modifyþsµ€ð OØ—/‘/ $×"6Ñ"6°wÓ"?Ñ@ˆCð �S—Z‘ZÒ Ø �O‰O˜GÔ $Ø—-‘- ¨°Ó6ˆCð ˆ ð �S—X‘XÒ à—,‘, D�,Ó)ˆCØ&)ˆD�O‰O˜CŸF™FÑ #؈ øôò OÜÐ3×:Ñ:¸7ÓCÓDÈ$Ð Nð Oús ‚BÂ%B6cóF—|jj«d|_yr)r#ÚclearrTr$s rrDz_BaseSelectorImpl.close s€Ø �‰×ÑÔØˆ� r có—|jSr)rTr$s rrFz_BaseSelectorImpl.get_maps €Ø�y‰yÐr có@— |j|S#t$rYywxYw)z³Return the key associated to a given file descriptor. Parameters: fd -- file descriptor Returns: corresponding key, or None if not found N)r#r*)rrs rÚ _key_from_fdz_BaseSelectorImpl._key_from_fds(€ð Ø—?‘? 2Ñ&Ð &øÜò Ùð ús ‚‘ œr) r/r0r1r2rr)r:r<r?rDrFrer3r rrRrRÎs-„Ù'ò+ò ó& òó òòó r rRc󀇗eZdZdZˆfd„Zdˆfd„ Zˆfd„Zejdk(rdd„Z n e jZ dd„Z ˆxZ S) ÚSelectSelectorzSelect-based selector.có^•—t‰|�«t«|_t«|_yr)ÚsuperrÚsetÚ_readersÚ_writers©rÚ __class__s €rrzSelectSelector.__init__%s ø€Ü ‰ÑÔÜ›ˆŒ Ü›ˆ� r cóâ•—t‰|�|||«}|tzr%|jj |j «|t zr%|jj |j «|Sr)rir:rZrkÚaddrr[rl)rrrrrXrns €rr:zSelectSelector.register*sWø€Ü‰gјw¨°Ó5ˆØ ”JÒ Ø �M‰M× Ñ ˜cŸf™fÔ %Ø ”KÒ Ø �M‰M× Ñ ˜cŸf™fÔ %؈ r c󺕗t‰|�|«}|jj|j«|j j|j«|Sr)rir<rkÚdiscardrrl©rrrXrns €rr<zSelectSelector.unregister2sCø€Ü‰gÑ  Ó)ˆØ � ‰ ×јcŸf™fÔ%Ø � ‰ ×јcŸf™fÔ%؈ r Úwin32cóJ—tj||||«\}}}|||zgfSr)rB)rÚrÚwÚ_rAÚxs rÚ_selectzSelectSelector._select9s,€Ü—m‘m A q¨!¨WÓ5‰GˆAˆq�!Ø�a˜!‘e˜R�<Ð r có†—|€dn t|d«}g} |j|j|jg|«\}}}t |«}t |«}||zD]R}d}||vr |t z}||vr |tz}|j|«}|sŒ3|j|||jzf«ŒT|S#t$r|cYSwxYw©Nr) ÚmaxrzrkrlÚInterruptedErrorrjrZr[reÚappendr) rrAÚreadyrvrwrxrrrXs rrBzSelectSelector.select?sÒ€Ø!˜/‘$¬s°7¸A«ˆØˆð Ø—l‘l 4§=¡=°$·-±-ÀÀWÓM‰GˆAˆq�!ô �‹FˆÜ �‹FˆØ�a”%ˆB؈FØ�Q‰wØœ*Ñ$�Ø�Q‰wØœ+Ñ%�à×#Ñ# BÓ'ˆCÚØ— ‘ ˜c 6¨C¯J©JÑ#6Ð7Õ8ððˆ øô ò ØŠLð ús”,B2Â2 CÂ?Cr) r/r0r1r2rr:r<ÚsysÚplatformrzrBÚ __classcell__©rns@rrgrg"s8ø„Ù ôõ ôð  ‡|�|�wÒô ð—-‘-ˆ÷r rgcóX‡—eZdZdZdZdZdZˆfd„Zdˆfd„ Zˆfd„Z dˆfd„ Z dd„Z ˆxZ S) Ú_PollLikeSelectorzðˆGØ �3—8‘8Ò ØˆGá Ø—,‘, f°4�,Ó8ˆCØ&)ˆD�O‰O˜CŸF™FÑ #؈ øô-ò Gܘg˜[Ð(:Ð;Ó<À$Ð Fð Gûð Ü‘Ñ" 7Ô+ØúsƒCÁ%&C*ÃC'Ã*C<có’—|€d}n |dkrd}ntj|dz«}g} |jj|«}|D]m\}}d}||j zr |t z}||jzr |tz}|j|«}|sŒN|j|||jzf«Œo|S#t$r|cYSwxYw)Nrç@�@) ÚmathÚceilrÚpollr~rŠr[r‹rZrerr)rrAr€Ú fd_event_listrÚeventrrXs rrBz_PollLikeSelector.select’sá€ð ˆ?؉GØ ˜Š\؉Gô—i‘i ¨#¡ Ó.ˆGØˆð Ø ŸN™N×/Ñ/°Ó8ˆMó'‰IˆB�؈Fؘ×(Ñ(Ð(Ò(Øœ+Ñ%�ؘ×)Ñ)Ð)Ò)Øœ*Ñ$�à×#Ñ# BÓ'ˆCÚØ— ‘ ˜c 6¨C¯J©JÑ#6Ð7Õ8ð'ðˆ øô ò ØŠLð ús©B8Â8 CÃCr) r/r0r1r2rˆrŠr‹rr:r<r?rBrƒr„s@rr†r†Us.ø„ÙFØ€MØ€KØ€Lô.õ ôõ÷6r r†r–cóX—eZdZdZej ZejZejZ y)Ú PollSelectorzPoll-based selector.N) r/r0r1r2rBr–rˆÚPOLLINrŠÚPOLLOUTr‹r3r rršrš±s „Ù"ØŸ ™ ˆ Ø—m‘mˆ Ø—~‘~‰ r ršÚepollcóx‡—eZdZdZej ZejZejZ d„Z dd„Zˆfd„Z ˆxZ S)Ú EpollSelectorzEpoll-based selector.có6—|jj«Sr©rr r$s rr zEpollSelector.filenoÀ󀨗>‘>×(Ñ(Ó*Ð *r cóè—|€d}n#|dkrd}ntj|dz«dz}tt|j«d«}g} |j j ||«}|D]u\}}d}|tjzr |tz}|tjzr |tz}|j|«}|sŒV|j|||jzf«Œw|S#t$r|cYSwxYw)Néÿÿÿÿrr“gü©ñÒMbP?r)r”r•r}r"r#rr–r~rBÚEPOLLINr[ÚEPOLLOUTrZrerr) rrAÚmax_evr€r—rr˜rrXs rrBzEpollSelector.selectÃsø€ØˆØ‘ؘA’Ø‘ôŸ)™) G¨c¡MÓ2°TÑ9�ô œ˜TŸ_™_Ó-¨qÓ1ˆFàˆEð Ø $§¡× 3Ñ 3°G¸VÓ D� ó+‘ ��EØ�ØœFŸN™N˜?Ò*ØœkÑ)�FØœFŸO™OÐ+Ò+ØœjÑ(�Fà×'Ñ'¨Ó+�ÚØ—L‘L # v°· ± Ñ':Ð!;Õ<ð+ðˆLøô$ò Ø’ ð úsÁ C#Ã# C1Ã0C1cóV•—|jj«t‰|�«yr©rrDrirms €rrDzEpollSelector.closeã󸀨 �N‰N× Ñ Ô "Ü ‰G‰M�Or r)r/r0r1r2rBr�rˆr¥rŠr¦r‹r rDrƒr„s@rrŸrŸºs6ø„Ù#ØŸ ™ ˆ Ø—n‘nˆ Ø—‘ˆ ò +ó ÷@ ð r rŸÚdevpollcóp‡—eZdZdZej ZejZejZ d„Z ˆfd„Z ˆxZ S)ÚDevpollSelectorzSolaris /dev/poll selector.có6—|jj«Srr¡r$s rr zDevpollSelector.filenoðr¢r cóV•—|jj«t‰|�«yrr©rms €rrDzDevpollSelector.closeórªr )r/r0r1r2rBr«rˆr›rŠrœr‹r rDrƒr„s@rr­r­ês0ø„Ù)ØŸ™ˆ Ø—m‘mˆ Ø—~‘~ˆ ò +÷ ð r r­ÚkqueuecóP‡—eZdZdZˆfd„Zd„Zdˆfd„ Zˆfd„Zdd„Zˆfd„Z ˆxZ S) ÚKqueueSelectorzKqueue-based selector.cób•—t‰|�«tj«|_d|_yr|)rirrBr°rÚ _max_eventsrms €rrzKqueueSelector.__init__ýs#ø€Ü ‰GÑ Ô Ü#Ÿ]™]›_ˆDŒNØ ˆDÕ r có6—|jj«Srr¡r$s rr zKqueueSelector.filenor¢r có:•—t‰|�|||«} |tzrptj|j tj tj«}|jj|gdd«|xjdz c_ |tzrptj|j tjtj«}|jj|gdd«|xjdz c_ |S#t‰|�5|«‚xYw©Nrr)rir:rZrBÚkeventrÚKQ_FILTER_READÚ KQ_EV_ADDrÚcontrolr´r[ÚKQ_FILTER_WRITEr<)rrrrrXÚkevrns €rr:zKqueueSelector.registers帀ܑ'Ñ" 7¨F°DÓ9ˆCð ØœJÒ&Ü Ÿ-™-¨¯©´×0EÑ0EÜ(.×(8Ñ(8ó:�Cà—N‘N×*Ñ*¨C¨5°!°QÔ7Ø×$Ò$¨Ñ)Õ$ØœKÒ'Ü Ÿ-™-¨¯©´×0FÑ0FÜ(.×(8Ñ(8ó:�Cà—N‘N×*Ñ*¨C¨5°!°QÔ7Ø×$Ò$¨Ñ)Õ$ðˆJøð Ü‘Ñ" 7Ô+Øús ”C2DÄDcóx•—t‰|�|«}|jtzrqt j |j tjtj«}|xjdzc_ |jj|gdd«|jtzrst j |j tjtj«}|xjdzc_ |jj|gdd«|S|S#t$rYŒ“wxYw#t$rY|SwxYw)Nrr)rir<rrZrBr¸rr¹Ú KQ_EV_DELETEr´rr»rŽr[r¼)rrrXr½rns €rr<zKqueueSelector.unregisters ø€Ü‘'Ñ$ WÓ-ˆCØ�z‰zœJÒ&Ü—m‘m C§F¡F¬F×,AÑ,AÜ$*×$7Ñ$7ó9�à× Ò  AÑ%Õ ðØ—N‘N×*Ñ*¨C¨5°!°QÔ7ð �z‰zœKÒ'Ü—m‘m C§F¡F¬F×,BÑ,BÜ$*×$7Ñ$7ó9�à× Ò  AÑ%Õ ðØ—N‘N×*Ñ*¨C¨5°!°QÔ7ðˆJ�3ˆJøôòñðûôòàØˆJðús$Á7DÃ;D,Ä D)Ä(D)Ä, D9Ä8D9có—|€dn t|d«}|jxsd}g} |jjd||«}|D]ˆ}|j }|j }d}|tjk(r |tz}|tjk(r |tz}|j|«} | sŒi|j| || jzf«ŒŠ|S#t$r|cYSwxYwr·)r}r´rr»r~ÚidentÚfilterrBr¹rZr¼r[rerr) rrAr§r€Úkev_listr½rÚflagrrXs rrBzKqueueSelector.select.s䀨%˜o‘d´3°wÀ³?ˆGð×%Ñ%Ò*¨ˆF؈Eð ØŸ>™>×1Ñ1°$¸ÀÓH�ó �Ø—Y‘Y�Ø—z‘z�Ø�Øœ6×0Ñ0Ò0ØœjÑ(�FØœ6×1Ñ1Ò1ØœkÑ)�Fà×'Ñ'¨Ó+�ÚØ—L‘L # v°· ± Ñ':Ð!;Õ<ð ðˆLøô$ò Ø’ ð ús¤Cà CÃCcóV•—|jj«t‰|�«yrr©rms €rrDzKqueueSelector.closeGrªr r) r/r0r1r2rr r:r<rBrDrƒr„s@rr²r²ús)ø„Ù$ô !ò  +õ ô$ ó. ÷2 ð r r²có¨—tt|d«}|€y |«}|dk(r|jd«y|j«y#t$rYywxYw)zJCheck if we can use the selector depending upon the operating system. NFr–rT)ÚgetattrrBr–rDrŽ)ÚmethodrÚ selector_objs rÚ_can_userÊLse€ô”v˜v tÓ,€HØÐàð Ù“zˆ Ø �VÒ à × Ñ ˜aÔ ðð × Ñ Ô ØøÜ òÙðús–A´AÁ AÁA)r2ÚabcrrÚ collectionsrÚcollections.abcrr”rBr�rZr[rrrrrrrr5rRrgr†ÚhasattrršrŸr­r²rÊÚDefaultSelectorr3r rÚrÐssðñ÷(Ý"Ý#Û Û Û ð€ Ø€ òñ2˜Ò(KÓL€ ð€ Ôð 8€ ×ÑÔØ6€ ‡�ÔØR€ ×ÑÔðE€ ×ÑÔô/�wô/ô({˜Wõ{ô|Q˜ ôQôh0Ð&ô0ôfWÐ)ôWñt ˆ6�6Ôô&Ð(ô&ñ ˆ6�7Ôô+Ð)ô+ñ\ ˆ6�9Ôô Ð+ô ñ ˆ6�8ÔôOÐ*ôOòdñ4 ˆHÔØ$�OÙ ˆgÔØ#�OÙ ˆiÔØ%�OÙ ˆfÔØ"�Oà$�Or