§
    ÈtºfÔ  ã                  óx  — U d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ d%d„Zedk    reZnej        Z	 ddlmZ eZn# e$ r
 e Zde!d<   Y nw xY w ed¦  «        Z"d&d„Z#d'd „Z$ ee¦  «         G d!„ d"ej%        e¦  «        ¦   «         Z&d#„ Z'd$gZ(dS )(z
Select reactor
é    )ÚannotationsN)ÚEBADFÚEINTR)Úsleep)ÚCallableÚTypeÚTypeVar)Úimplementer)Ú	posixbase)ÚIReactorFDSetÚIReadDescriptorÚIWriteDescriptor)Úlog)ÚplatformTypec                ó¶   — | s+|s)|€d}nt          |d¦  «        }t          |¦  «         g g g fS |�|dk    rd}t          j        | |||¦  «        \  } }}| ||z   g fS )zWin32 select wrapper.Ng{®Gáz„?gü©ñÒMbP?g      à?)Úminr   Úselect)ÚrÚwÚeÚtimeouts       ú]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/selectreactor.pyÚwin32selectr      s‚   € àð �ð àˆ?ØˆGˆGå˜' 5Ñ)Ô)ˆGÝˆg‰ŒˆØ�2�rˆzÐð €˜' Cš-˜-ØˆÝŒm˜A˜q ! WÑ-Ô-�G€A€qˆ!Øˆa�!‰e�Rˆ<Ðó    Úwin32)Ú_ThreadedWin32EventsMixinzType[object]Ú
_extraBaseÚ_TÚtoPreenúlist[_T]Ú	preenIntoúset[_T]Ú
disconnectú%Callable[[_T, Exception, bool], None]ÚreturnÚNonec                ó  — |                      ¦   «          | D ]m}	 t          j        |g|g|gd¦  «         |                     |¦  «         Œ3# t          $ r.}t	          j        d|z  ¦  «          |||d¦  «         Y d }~Œfd }~ww xY wd S )Nr   zbad descriptor %sF)Úclearr   ÚaddÚ	Exceptionr   Úmsg)r   r!   r#   Ú
selectabler   s        r   Ú	_onePreenr-   :   s¿   € ð
 ‡O‚OÑÔÐØð &ð &ˆ
ð	&ÝŒM˜:˜,¨¨°z°lÀAÑFÔFÐFð
 �MŠM˜*Ñ%Ô%Ð%Ð%øõ	 ð 	-ð 	-ð 	-ÝŒGÐ'¨*Ñ4Ñ5Ô5Ð5ØˆJ�z 1 eÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,øøøøð	-øøøð&ð &s   šA
Á

BÁ$A=Á=BÚreadsúset[IReadDescriptor]Úwritesúset[IWriteDescriptor]úECallable[[IReadDescriptor | IWriteDescriptor, Exception, bool], None]c                ó®   — t          j        d¦  «         t          | ¦  «        }t          |¦  «        }t          || |¦  «         t          |||¦  «         d S )Nz1Malformed file descriptor found.  Preening lists.)r   r+   Úlistr-   )r.   r0   r#   ÚreadersÚwriterss        r   Ú_preenDescriptorsr7   J   sU   € õ
 „GÐ?Ñ@Ô@Ð@Ý%)¨%¡[¤[€GÝ&*¨6¡l¤l€GÝˆg�u˜jÑ)Ô)Ð)Ýˆg�v˜zÑ*Ô*Ð*Ð*Ð*r   c                  ó\   — e Zd ZdZdd„Zdd„Zd„ ZeZd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSelectReactora-  
    A select() based reactor - runs on all POSIX platforms and on Win32.

    @ivar _reads: A set containing L{FileDescriptor} instances which will be
        checked for read events.

    @ivar _writes: A set containing L{FileDescriptor} instances which will be
        checked for writability.
    r%   r&   c                ó�   — t          ¦   «         | _        t          ¦   «         | _        t          j                             | ¦  «         dS )zV
        Initialize file descriptor tracking dictionaries and the base class.
        N)ÚsetÚ_readsÚ_writesr   ÚPosixReactorBaseÚ__init__©Úselfs    r   r?   zSelectReactor.__init__b   s7   € õ -0©E¬EˆŒÝ.1©e¬eˆŒÝÔ"×+Ò+¨DÑ1Ô1Ð1Ð1Ð1r   c                óF   — t          | j        | j        | j        ¦  «         d S ©N)r7   r<   r=   Ú_disconnectSelectabler@   s    r   r7   zSelectReactor._preenDescriptorsj   s!   € Ý˜$œ+ t¤|°TÔ5OÑPÔPÐPÐPÐPr   c                ó‚  — 	 t          | j        | j        g |¦  «        \  }}}nÖ# t          $ r |                      ¦   «          Y dS t
          $ r+ t          j        ¦   «          |                      ¦   «          Y dS t          $ rv}|j	        d         dv r| j        s| j        sY d}~dS ‚ |j	        d         t          k    rY d}~dS |j	        d         t          k    r|                      ¦   «          Y d}~dS ‚ d}~ww xY w| j        }t          j        }|d| j        f|d| j        ffD ]\  }}	}
|D ]}||
vrŒ |||||	¦  «         ŒŒdS )zŸ
        Run one iteration of the I/O monitor loop.

        This will run all selectables who had input or output readiness
        waiting for them.
        Nr   )r   é   ÚdoReadÚdoWrite)Ú_selectr<   r=   Ú
ValueErrorr7   Ú	TypeErrorr   ÚerrÚOSErrorÚargsr   r   Ú_doReadOrWriteÚcallWithLogger)rA   r   r   r   ÚignoredÚseÚ_drdwÚ_logrunÚselectablesÚmethodÚfdsetr,   s               r   ÚdoSelectzSelectReactor.doSelectm   s¼  € ð	Ý# D¤K°´¸rÀ7ÑKÔK‰MˆAˆq�'�'øÝð 	ð 	ð 	à×"Ò"Ñ$Ô$Ð$ØˆFˆFÝð 	ð 	ð 	õ ŒG‰IŒIˆIØ×"Ò"Ñ$Ô$Ð$ØˆFˆFÝð 	ð 	ð 	ð Œw�qŒz˜VÐ#Ð#àœð ¨d¬lð Ø�F�F�F�F�FàØ”˜”�uÒ$Ð$Ø�����Ø”˜”�uÒ$Ð$Ø×&Ò&Ñ(Ô(Ð(Ø�����ð øøøøð#	øøøð& Ô#ˆÝÔ$ˆà�˜$œ+Ð&Ø�	˜4œ<Ð(ð+
ð 
	?ð 
	?Ñ&ˆK˜ ð *ð ?ð ?�
ð  UÐ*Ð*Øà�˜
 E¨:°vÑ>Ô>Ð>Ð>ð?ð	
	?ð 
	?s3   ‚ # £C6Á0C6Á7	C6Â C1Â#C1Ã *C1Ã0C1Ã1C6c                óð   — 	  t          ||¦  «        ¦   «         }n<# t          $ r/ t          j        ¦   «         d         }t	          j        ¦   «          Y nw xY w|r|                      |||dk    ¦  «         d S d S )Né   rG   )ÚgetattrÚBaseExceptionÚsysÚexc_infor   rL   rD   )rA   r,   rV   Úwhys       r   rO   zSelectReactor._doReadOrWrite£   s”   € ð	Ø-•'˜* fÑ-Ô-Ñ/Ô/ˆCˆCøÝð 	ð 	ð 	Ý”,‘.”. Ô#ˆCÝŒG‰IŒIˆIˆIˆIð	øøøð ð 	LØ×&Ò& z°3¸À(Ò8JÑKÔKÐKÐKÐKð	Lð 	Ls   ‚ ›6AÁAc                ó:   — | j                              |¦  «         dS )zR
        Add a FileDescriptor for notification of data available to read.
        N)r<   r)   ©rA   Úreaders     r   Ú	addReaderzSelectReactor.addReader¬   s   € ð 	Œ�Š˜ÑÔÐÐÐr   c                ó:   — | j                              |¦  «         dS )zS
        Add a FileDescriptor for notification of data available to write.
        N)r=   r)   ©rA   Úwriters     r   Ú	addWriterzSelectReactor.addWriter²   s    € ð 	Œ×Ò˜Ñ Ô Ð Ð Ð r   c                ó:   — | j                              |¦  «         dS )zQ
        Remove a Selectable for notification of data available to read.
        N)r<   Údiscardra   s     r   ÚremoveReaderzSelectReactor.removeReader¸   s    € ð 	Œ×Ò˜FÑ#Ô#Ð#Ð#Ð#r   c                ó:   — | j                              |¦  «         dS )zR
        Remove a Selectable for notification of data available to write.
        N)r=   ri   re   s     r   ÚremoveWriterzSelectReactor.removeWriter¾   s    € ð 	Œ×Ò˜VÑ$Ô$Ð$Ð$Ð$r   c                óB   — |                       | j        | j        ¦  «        S rC   )Ú
_removeAllr<   r=   r@   s    r   Ú	removeAllzSelectReactor.removeAllÄ   s   € Ø�Š˜tœ{¨D¬LÑ9Ô9Ð9r   c                ó*   — t          | j        ¦  «        S rC   )r4   r<   r@   s    r   Ú
getReaderszSelectReactor.getReadersÇ   s   € Ý�D”KÑ Ô Ð r   c                ó*   — t          | j        ¦  «        S rC   )r4   r=   r@   s    r   Ú
getWriterszSelectReactor.getWritersÊ   s   € Ý�D”LÑ!Ô!Ð!r   N)r%   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   r7   rX   ÚdoIterationrO   rc   rg   rj   rl   ro   rq   rs   © r   r   r9   r9   V   sÜ   € € € € € ðð ð2ð 2ð 2ð 2ðQð Qð Qð Qð2?ð 2?ð 2?ðh €KðLð Lð Lð ð  ð  ð!ð !ð !ð$ð $ð $ð%ð %ð %ð:ð :ð :ð!ð !ð !ð"ð "ð "ð "ð "r   r9   c                 óD   — t          ¦   «         } ddlm}  || ¦  «         dS )zDConfigure the twisted mainloop to be run using the select() reactor.r   )ÚinstallReactorN)r9   Útwisted.internet.mainr{   )Úreactorr{   s     r   Úinstallr~   Î   s3   € å‰oŒo€GØ4Ð4Ð4Ð4Ð4Ð4à€N�7ÑÔÐÐÐr   r~   rC   )r   r    r!   r"   r#   r$   r%   r&   )r.   r/   r0   r1   r#   r2   r%   r&   ))rw   Ú
__future__r   r   r]   Úerrnor   r   Útimer   Útypingr   r   r	   Úzope.interfacer
   Útwisted.internetr   Útwisted.internet.interfacesr   r   r   Útwisted.pythonr   Útwisted.python.runtimer   r   rI   Ú"twisted.internet.win32eventreactorr   r   ÚImportErrorÚobjectÚ__annotations__r   r-   r7   r>   r9   r~   Ú__all__ry   r   r   ú<module>r�      s  ðð
ð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à &Ð &Ð &Ð &Ð &Ð &à &Ð &Ð &Ð &Ð &Ð &Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð$ �7ÒÐØ€G€GàŒm€Gð+ØLÐLÐLÐLÐLÐLð +€J€Jøð ð &ð &ð &Ø%€JÐ%Ð%Ð%Ñ%Ð%Ð%ð&øøøð
 €WˆT�]„]€ð&ð &ð &ð &ð 	+ð 	+ð 	+ð 	+ð €ˆ]ÑÔðt"ð t"ð t"ð t"ð t"�IÔ.°
ñ t"ô t"ñ Ôðt"ðnð ð ð ˆ+€€€s   Á!A* Á*A9Á8A9