
    h!                         S r SSKJr  SSKJrJr  SrSr " S S5      r " S S	5      r	SS
K
r
SS
KrSS
KrSS
Kr\" \5       " S S\5      5       rSr\" \5       " S S\5      5       rg
)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                   $    \ rS rSrSrS rS rSrg)_PollableResource   Tc                     SU l         g NTactiveselfs    d/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/internet/_pollingfile.pyactivate_PollableResource.activate   s	        c                     SU l         g NFr   r   s    r   
deactivate_PollableResource.deactivate   s	    r   r   N)__name__
__module____qualname____firstlineno__r   r   r   __static_attributes__ r   r   r   r      s    Fr   r   c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)_PollingTimer   c                 P    Xl         / U l        S U l        [        U l        SU l        g r   )reactor
_resources
_pollTimerMAX_TIMEOUT_currentTimeout_paused)r   r!   s     r   __init___PollingTimer.__init__    s$    *r   c                 Z    U R                   R                  U5        U R                  5         g N)r"   append_checkPollingState)r   ress     r   _addPollableResource"_PollingTimer._addPollableResource'   s     s#!r   c                     U R                    H&  nUR                  (       d  M  U R                  5           g    U R                  5         g r*   )r"   r   _startPolling_stopPolling)r   resources     r   r,    _PollingTimer._checkPollingState+   s6    H""$ (
 r   c                 J    U R                   c  U R                  5       U l         g g r*   )r#   _rescheduler   s    r   r1   _PollingTimer._startPolling3   s!    ??""..0DO #r   c                 b    U R                   b"  U R                   R                  5         S U l         g g r*   )r#   cancelr   s    r   r2   _PollingTimer._stopPolling7   s(    ??&OO""$"DO 'r   c                     SU l         g r
   )r&   r   s    r   _pause_PollingTimer._pause<   s	    r   c                 2    SU l         U R                  5         g r   )r&   r,   r   s    r   _unpause_PollingTimer._unpause?   s    !r   c                     U R                   (       d0  U R                  R                  U R                  U R                  5      $ g r*   )r&   r!   	callLaterr%   
_pollEventr   s    r   r6   _PollingTimer._rescheduleC   s/    ||<<))$*>*>PP r   c                    Sn/ nU R                    HL  nUR                  (       d  M  XR                  5       -  nUR                  (       d  M;  UR                  U5        MN     U R                  nU(       a#  U R                  US-   -  nU[
        :  a  [
        nOU R                  S-  nU[        :  a  [        nX@l        U(       a  U R                  5       U l        g g )Ng        g      ?g       @)	r"   r   	checkWorkr+   r%   MIN_TIMEOUTr$   r6   r#   )r   	workUnits	anyActiver3   
newTimeouts        r   rC   _PollingTimer._pollEventG   s    		H//11	???$$X. ( ))
--SAJK'(
--3JK'(
)"..0DO r   )r%   r&   r#   r"   r!   N)r   r   r   r   r'   r.   r,   r1   r2   r<   r?   r6   rC   r   r   r   r   r   r      s0    " 1#
"Q1r   r   Nc                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)_PollableReadPipeh   c                 (    Xl         X l        X0l        g r*   )pipereceivedCallbacklostCallback)r   rP   rQ   rR   s       r   r'   _PollableReadPipe.__init__j   s    	 0(r   c                    Sn/ n  [         R                  " U R                  S5      u  p4nU(       d  O7[        R                  " U R                  US 5      u  pgUR                  U5        Md  SR                  U5      nU(       a  U R                  U5        U(       a  U R                  5         [        U5      $ ! [        R                   a    Sn Md  f = f)Nr      r   )	win32pipePeekNamedPiperP   	win32fileReadFiler+   win32apierrorjoinrQ   cleanuplen)	r   finishedfullDataReadbufferbytesToReadresulthrdatadataBufs	            r   rF   _PollableReadPipe.checkWorkp   s    	.7.E.EdiiQR.S+V"$--diidK##D)  ((<(!!'*LLN7| >> s   +B5 5B5 5CCc                 D    U R                  5         U R                  5         g r*   )r   rR   r   s    r   r]   _PollableReadPipe.cleanup   s    r   c                 z     [         R                  " U R                  5        g ! [        R                   a     g f = fr*   )rZ   CloseHandlerP   
pywintypesr[   r   s    r   close_PollableReadPipe.close   s1    	  + 		s    # ::c                 $    U R                  5         g r*   )rm   r   s    r   stopProducing_PollableReadPipe.stopProducing   s    

r   c                 $    U R                  5         g r*   )r   r   s    r   pauseProducing _PollableReadPipe.pauseProducing   s    r   c                 $    U R                  5         g r*   )r   r   s    r   resumeProducing!_PollableReadPipe.resumeProducing   s    r   )rR   rP   rQ   N)r   r   r   r   r'   rF   r]   rm   rp   rs   rv   r   r   r   r   rM   rM   h   s%    ).r   rM   i   c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)_PollableWritePipe   c                     SU l         S U l        SU l        SU l        / U l        Xl        X l         [        R                  " U[        R                  S S 5        g ! [        R                   a     g f = f)NFr   )disconnectingproducerproducerPausedstreamingProduceroutQueue	writePiperR   rV   SetNamedPipeHandleStatePIPE_NOWAITrl   r[   )r   r   rR   s      r   r'   _PollableWritePipe.__init__   so    "#!""(	--900$  		s   'A A0/A0c                     SU l         g r
   )r|   r   s    r   rm   _PollableWritePipe.close   s
    !r   c                 b    U R                   b"  SU l        U R                   R                  5         g g r
   )r}   r~   rs   r   s    r   
bufferFull_PollableWritePipe.bufferFull   s)    ==$"&DMM((* %r   c                     U R                   bN  U R                  (       a  U R                  (       a,  SU R                   l        U R                   R                  5         gg)NFT)r}   r   r~   rv   r   s    r   bufferEmpty_PollableWritePipe.bufferEmpty   s?    ==$''D,?,?+0DMM(MM))+r   c                     U R                   b  [        SU< SU R                   < S35      eU R                  (       d  UR                  5         gXl         X l        U(       d  UR                  5         gg)aG  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.)r}   RuntimeErrorr   rp   r   rv   )r   r}   	streamings      r   registerProducer#_PollableWritePipe.registerProducer   s]     ==$#+T]]<  {{""$$M%."((* r   c                     SU l         g)z;Stop consuming data from a producer, without disconnecting.N)r}   r   s    r   unregisterProducer%_PollableWritePipe.unregisterProducer   s	    r   c                     U R                  5          [        R                  " U R                  5        U R                  5         g ! [        R
                   a     N'f = fr*   )r   rZ   rk   r   rl   r[   rR   r   s    r   writeConnectionLost&_PollableWritePipe.writeConnectionLost   sK    	  0 	  		s    A AAc                     [         [        [        U5      ;   a  [        S5      eU R                  R                  U5        g)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	TypeErrorr   extend)r   seqs     r   writeSequence _PollableWritePipe.writeSequence   s0     #dC. CDDS!r   c                    [        U[        5      (       a  [        S5      eU R                  (       a  gU R                  R                  U5        [        [        [        U R                  5      5      [        :  a  U R                  5         gg)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}.
r   N)
isinstancer   r   r|   r   r+   sumr   r^   FULL_BUFFER_SIZEr   )r   re   s     r   write_PollableWritePipe.write   sc     dC  CDDT"s3&'*::OO ;r   c                 
   SnU R                   (       dE  U R                  (       a  U R                  5         g [        R                  " U R
                  SS 5        U R                   (       a  U R                   R                  S5      nSn [        R                  " U R
                  US 5      u  p4X-  n[        U5      U:  a!  U R                   R                  SX$S  5         U$  U R                   (       a  M  U R                  5       nU(       d!  U R                  (       a  U R                  5         U$ ! [        R                   a    U R                  5         Us $ f = f! [        R                   a    U R                  5          U$ f = f)Nr   r   )r   r|   r   rX   	WriteFiler   rl   r[   popr^   insertrZ   r   )r   numBytesWrittenre   errCodenBytesWrittenresumeds         r   rF   _PollableWritePipe.checkWork  sO   }}!!((*'##DNNC> mm==$$Q'DG
)2)<)<T^^TSW)X&  0t9},MM((D,@A
  - mmm &&(Gt11((*+ ## '((*&&' >> ((* s#   "D. $E .&EE$FF)r|   rR   r   r}   r~   r   r   N)r   r   r   r   r'   rm   r   r   r   r   r   r   r   rF   r   r   r   r   ry   ry      s4     "+
+.""r   ry   )__doc__zope.interfacer   twisted.internet.interfacesr   r   rG   r$   r   r   rl   rZ   rX   rV   rM   r   ry   r   r   r   <module>r      s   
 ' @ ?1 ?1J     ]0) 0 0f   YC* C Cr   