§
    Ètºf÷!  ã                   ó  — d Z ddlmZ ddlmZmZ dZdZ G d„ d¦  «        Z G d„ d	¦  «        Z	dd
l
Z
dd
lZdd
lZdd
lZ ee¦  «         G d„ de¦  «        ¦   «         ZdZ ee¦  «         G d„ de¦  «        ¦   «         Zd
S )zˆ
Implements a simple polling interface for file descriptors that don't work with
select() - this is pretty much only useful on Windows.
é    )Úimplementer)Ú	IConsumerÚIPushProducerg•Ö&è.>gš™™™™™¹?c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú_PollableResourceTc                 ó   — d| _         d S ©NT©Úactive©Úselfs    ú\/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/_pollingfile.pyÚactivatez_PollableResource.activate   s   € ØˆŒˆˆó    c                 ó   — d| _         d S ©NFr
   r   s    r   Ú
deactivatez_PollableResource.deactivate   s   € ØˆŒˆˆr   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   © r   r   r   r      s7   € € € € € Ø€Fðð ð ðð ð ð ð r   r   c                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )Ú_PollingTimerc                 óV   — || _         g | _        d | _        t          | _        d| _        d S r   )ÚreactorÚ
_resourcesÚ
_pollTimerÚMAX_TIMEOUTÚ_currentTimeoutÚ_paused)r   r   s     r   Ú__init__z_PollingTimer.__init__    s*   € ØˆŒØˆŒØˆŒÝ*ˆÔØˆŒˆˆr   c                 ób   — | j                              |¦  «         |                      ¦   «          d S ©N)r   ÚappendÚ_checkPollingState)r   Úress     r   Ú_addPollableResourcez"_PollingTimer._addPollableResource'   s0   € ØŒ×Ò˜sÑ#Ô#Ð#Ø×ÒÑ!Ô!Ð!Ð!Ð!r   c                 ó~   — | j         D ] }|j        r|                      ¦   «           d S Œ!|                      ¦   «          d S r#   )r   r   Ú_startPollingÚ_stopPolling)r   Úresources     r   r%   z _PollingTimer._checkPollingState+   sU   € Øœð 	 ð 	 ˆHØŒð Ø×"Ò"Ñ$Ô$Ð$Ø��ðð ×ÒÑÔÐÐÐr   c                 óJ   — | j         €|                      ¦   «         | _         d S d S r#   )r   Ú_rescheduler   s    r   r)   z_PollingTimer._startPolling3   s)   € ØŒ?Ð"Ø"×.Ò.Ñ0Ô0ˆDŒOˆOˆOð #Ð"r   c                 óX   — | j         �"| j                              ¦   «          d | _         d S d S r#   )r   Úcancelr   s    r   r*   z_PollingTimer._stopPolling7   s1   € ØŒ?Ð&ØŒO×"Ò"Ñ$Ô$Ð$Ø"ˆDŒOˆOˆOð 'Ð&r   c                 ó   — d| _         d S r	   )r    r   s    r   Ú_pausez_PollingTimer._pause<   s   € ØˆŒˆˆr   c                 ó<   — d| _         |                      ¦   «          d S r   )r    r%   r   s    r   Ú_unpausez_PollingTimer._unpause?   s!   € ØˆŒØ×ÒÑ!Ô!Ð!Ð!Ð!r   c                 ó^   — | j         s%| j                             | j        | j        ¦  «        S d S r#   )r    r   Ú	callLaterr   Ú
_pollEventr   s    r   r-   z_PollingTimer._rescheduleC   s6   € ØŒ|ð 	QØ”<×)Ò)¨$Ô*>ÀÄÑPÔPÐPð	Qð 	Qr   c                 óh  — d}g }| j         D ]<}|j        r3||                     ¦   «         z  }|j        r|                     |¦  «         Œ=| j        }|r | j        |dz   z  }|t
          k     rt
          }n| j        dz  }|t          k    rt          }|| _        |r|                      ¦   «         | _        d S d S )Ng        g      ð?g       @)	r   r   Ú	checkWorkr$   r   ÚMIN_TIMEOUTr   r-   r   )r   Ú	workUnitsÚ	anyActiver+   Ú
newTimeouts        r   r6   z_PollingTimer._pollEventG   sÜ   € Øˆ	Øˆ	Øœð 	/ð 	/ˆHØŒð /Ø˜X×/Ò/Ñ1Ô1Ñ1�	à”?ð /Ø×$Ò$ XÑ.Ô.Ð.øàÔ)ˆ
Øð 	)ØÔ-°¸S±ÑAˆJØ�KÒ'Ð'Ý(�
øàÔ-°Ñ3ˆJØ�KÒ'Ð'Ý(�
Ø)ˆÔØð 	1Ø"×.Ò.Ñ0Ô0ˆDŒOˆOˆOð	1ð 	1r   N)r   r   r   r!   r'   r%   r)   r*   r1   r3   r-   r6   r   r   r   r   r      sž   € € € € € ðð ð ð"ð "ð "ð ð  ð  ð1ð 1ð 1ð#ð #ð #ð
ð ð ð"ð "ð "ðQð Qð Qð1ð 1ð 1ð 1ð 1r   r   Nc                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	Ú_PollableReadPipec                 ó0   — || _         || _        || _        d S r#   )ÚpipeÚreceivedCallbackÚlostCallback)r   r@   rA   rB   s       r   r!   z_PollableReadPipe.__init__j   s   € àˆŒ	Ø 0ˆÔØ(ˆÔÐÐr   c                 óŠ  — d}g }	 	 t          j        | j        d¦  «        \  }}}|snLt          j        | j        |d ¦  «        \  }}|                     |¦  «         n# t          j        $ r d}Y nw xY wŒnd                     |¦  «        }|r|  	                    |¦  «         |r|  
                    ¦   «          t          |¦  «        S )Nr   é   r   )Ú	win32pipeÚPeekNamedPiper@   Ú	win32fileÚReadFiler$   Úwin32apiÚerrorÚjoinrA   ÚcleanupÚlen)	r   ÚfinishedÚfullDataReadÚbufferÚbytesToReadÚresultÚhrÚdataÚdataBufs	            r   r8   z_PollableReadPipe.checkWorkp   sê   € ØˆØˆð
	ð	Ý.7Ô.EÀdÄiÐQRÑ.SÔ.SÑ+�˜ Và"ð ØÝ$Ô-¨d¬i¸ÀdÑKÔK‘��DØ×#Ò# DÑ)Ô)Ð)Ð)øÝ”>ð ð ð Ø�Ø�ðøøøð
	ð —(’(˜<Ñ(Ô(ˆØð 	+Ø×!Ò! 'Ñ*Ô*Ð*Øð 	Ø�LŠL‰NŒNˆNÝ�7‰|Œ|Ðs   ‡ A ¨3A ÁA0Á/A0c                 óV   — |                       ¦   «          |                      ¦   «          d S r#   )r   rB   r   s    r   rL   z_PollableReadPipe.cleanup‡   s*   € Ø�ŠÑÔÐØ×ÒÑÔÐÐÐr   c                 óf   — 	 t          j        | j        ¦  «         d S # t          j        $ r Y d S w xY wr#   )rI   ÚCloseHandler@   Ú
pywintypesrJ   r   s    r   Úclosez_PollableReadPipe.close‹   sE   € ð	ÝÔ  ¤Ñ+Ô+Ð+Ð+Ð+øÝÔð 	ð 	ð 	àˆDˆDð	øøøs   ‚ �0¯0c                 ó.   — |                       ¦   «          d S r#   )rZ   r   s    r   ÚstopProducingz_PollableReadPipe.stopProducing’   s   € Ø�
Š
‰Œˆˆˆr   c                 ó.   — |                       ¦   «          d S r#   )r   r   s    r   ÚpauseProducingz _PollableReadPipe.pauseProducing•   s   € Ø�ŠÑÔÐÐÐr   c                 ó.   — |                       ¦   «          d S r#   )r   r   s    r   ÚresumeProducingz!_PollableReadPipe.resumeProducing˜   s   € Ø�Š‰Œˆˆˆr   N)
r   r   r   r!   r8   rL   rZ   r\   r^   r`   r   r   r   r>   r>   h   s}   € € € € € ð)ð )ð )ðð ð ð.ð ð ðð ð ðð ð ðð ð ðð ð ð ð r   r>   i   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )Ú_PollableWritePipec                 óØ   — d| _         d | _        d| _        d| _        g | _        || _        || _        	 t          j        |t          j	        d d ¦  «         d S # t          j        $ r Y d S w xY w)NFr   )ÚdisconnectingÚproducerÚproducerPausedÚstreamingProducerÚoutQueueÚ	writePiperB   rE   ÚSetNamedPipeHandleStateÚPIPE_NOWAITrY   rJ   )r   ri   rB   s      r   r!   z_PollableWritePipe.__init__¡   sŽ   € Ø"ˆÔØˆŒØ#ˆÔØ!"ˆÔØˆŒØ"ˆŒØ(ˆÔð	ÝÔ-Ø�9Ô0°$¸ñô ð ð ð øõ Ôð 	ð 	ð 	àˆDˆDð	øøøs   ³!A ÁA)Á(A)c                 ó   — d| _         d S r	   )rd   r   s    r   rZ   z_PollableWritePipe.close±   s   € Ø!ˆÔÐÐr   c                 óX   — | j         �"d| _        | j                              ¦   «          d S d S r	   )re   rf   r^   r   s    r   Ú
bufferFullz_PollableWritePipe.bufferFull´   s4   € ØŒ=Ð$Ø"&ˆDÔØŒM×(Ò(Ñ*Ô*Ð*Ð*Ð*ð %Ð$r   c                 ó~   — | j         �5| j        r| j        r'd| j         _        | j                              ¦   «          dS dS )NFT)re   rg   rf   r`   r   s    r   ÚbufferEmptyz_PollableWritePipe.bufferEmpty¹   sJ   € ØŒ=Ð$ØÔ'ð %Ø,0Ô,?ð %ð ,1ˆDŒMÔ(ØŒM×)Ò)Ñ+Ô+Ð+Ø�4Øˆur   c                 óÐ   — | j         �t          d|›d| j         ›d�¦  «        ‚| j        s|                     ¦   «          dS || _         || _        |s|                     ¦   «          dS dS )aw  Register to receive data from a producer.

        This sets this selectable to be a consumer for a producer.  When this
        selectable runs out of data on a write() call, it will ask the producer
        to resumeProducing(). A producer should implement the IProducer
        interface.

        FileDescriptor provides some infrastructure for producer methods.
        NzCannot register producer z, because producer z was never unregistered.)re   ÚRuntimeErrorr   r\   rg   r`   )r   re   Ú	streamings      r   ÚregisterProducerz#_PollableWritePipe.registerProducerÄ   s‘   € ð Œ=Ð$Ý�,à#+ 8 8¨T¬]¨]¨]ð<ñô ð ð Œ{ð 	+Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$à$ˆDŒMØ%.ˆDÔ"Øð +Ø×(Ò(Ñ*Ô*Ð*Ð*Ð*ð+ð +r   c                 ó   — d| _         dS )z;Stop consuming data from a producer, without disconnecting.N)re   r   s    r   ÚunregisterProducerz%_PollableWritePipe.unregisterProducerÛ   s   € àˆŒˆˆr   c                 ó¶   — |                       ¦   «          	 t          j        | j        ¦  «         n# t          j        $ r Y nw xY w|                      ¦   «          d S r#   )r   rI   rX   ri   rY   rJ   rB   r   s    r   ÚwriteConnectionLostz&_PollableWritePipe.writeConnectionLostß   sj   € Ø�ŠÑÔÐð	ÝÔ  ¤Ñ0Ô0Ð0Ð0øÝÔð 	ð 	ð 	àˆDð	øøøð 	×ÒÑÔÐÐÐs   –0 °AÁAc                 ó�   — t           t          t          |¦  «        v rt          d¦  «        ‚| j                             |¦  «         dS )zõ
        Append a C{list} or C{tuple} of bytes to the output buffer.

        @param seq: C{list} or C{tuple} of C{str} instances to be appended to
            the output buffer.

        @raise TypeError: If C{seq} contains C{unicode}.
        ú%Unicode not allowed in output buffer.N)ÚstrÚmapÚtypeÚ	TypeErrorrh   Úextend)r   Úseqs     r   ÚwriteSequencez _PollableWritePipe.writeSequenceè   sB   € õ •#•d˜C‘.”.Ð Ð ÝÐCÑDÔDÐDØŒ×Ò˜SÑ!Ô!Ð!Ð!Ð!r   c                 ó   — t          |t          ¦  «        rt          d¦  «        ‚| j        rdS | j                             |¦  «         t          t          t          | j        ¦  «        ¦  «        t          k    r|  
                    ¦   «          dS dS )zÞ
        Append some bytes to the output buffer.

        @param data: C{str} to be appended to the output buffer.
        @type data: C{str}.

        @raise TypeError: If C{data} is C{unicode} instead of C{str}.
        rz   N)Ú
isinstancer{   r~   rd   rh   r$   Úsumr|   rM   ÚFULL_BUFFER_SIZErn   )r   rT   s     r   Úwritez_PollableWritePipe.writeõ   sŠ   € õ �d�CÑ Ô ð 	EÝÐCÑDÔDÐDØÔð 	ØˆFØŒ×Ò˜TÑ"Ô"Ð"Ý�s•3˜œÑ&Ô&Ñ'Ô'Õ*:Ò:Ð:Ø�OŠOÑÔÐÐÐð ;Ð:r   c                 ó¢  — d}| j         se| j        r|                      ¦   «          dS 	 t          j        | j        dd ¦  «         n+# t          j        $ r |                      ¦   «          |cY S w xY w| j         r¨| j                              d¦  «        }d}	 t          j        | j        |d ¦  «        \  }}||z  }t          |¦  «        |k    r$| j          
                    d||d …         ¦  «         nbn)# t          j        $ r |                      ¦   «          Y n<w xY w| j         °¨|                      ¦   «         }|s| j        r|                      ¦   «          |S )Nr   r   )rh   rd   rx   rG   Ú	WriteFileri   rY   rJ   ÚpoprM   ÚinsertrI   rp   )r   ÚnumBytesWrittenrT   ÚerrCodeÚnBytesWrittenÚresumeds         r   r8   z_PollableWritePipe.checkWork  sš  € ØˆØŒ}ð 	'ØÔ!ð Ø×(Ò(Ñ*Ô*Ð*Ø�qð'ÝÔ# D¤N°C¸Ñ>Ô>Ð>Ð>øÝÔ#ð 'ð 'ð 'Ø×(Ò(Ñ*Ô*Ð*Ø&Ð&Ð&Ð&ð'øøøð Œmð 	+Ø”=×$Ò$ QÑ'Ô'ˆDØˆGð
Ý)2Ô)<¸T¼^ÈTÐSWÑ)XÔ)XÑ&�˜ð   =Ñ0�Ý�t‘9”9˜}Ò,Ð,Ø”M×(Ò(¨¨D°°°Ô,@ÑAÔAÐAØð -øõ ”>ð ð ð Ø×(Ò(Ñ*Ô*Ð*Ø�ðøøøð Œmð 	+ð ×&Ò&Ñ(Ô(ˆGØð +˜tÔ1ð +Ø×(Ò(Ñ*Ô*Ð*ØÐs#   ¨A Á%A,Á+A,ÂC. Ã.#DÄDN)r   r   r   r!   rZ   rn   rp   rt   rv   rx   r�   r†   r8   r   r   r   rb   rb   Ÿ   sª   € € € € € ðð ð ð "ð "ð "ð+ð +ð +ð
ð ð ð+ð +ð +ð.ð ð ðð ð ð"ð "ð "ðð ð ð"ð ð ð ð r   rb   )Ú__doc__Úzope.interfacer   Útwisted.internet.interfacesr   r   r9   r   r   r   rY   rI   rG   rE   r>   r…   rb   r   r   r   ú<module>r’      sf  ðð
ð ð 'Ð &Ð &Ð &Ð &Ð &à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @à€Ø€ðð ð ð ð ñ ô ð ð?1ð ?1ð ?1ð ?1ð ?1ñ ?1ô ?1ð ?1ðJ Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð ð €ˆ]ÑÔð0ð 0ð 0ð 0ð 0Ð)ñ 0ô 0ñ Ôð0ðf Ð ð €ˆYÑÔðCð Cð Cð Cð CÐ*ñ Cô Cñ ÔðCð Cð Cr   