+
    Dfj                         R t ^ RIHt ^ RIHt ]! ]P
                  ]P                  4       ! R R4      4       t ! R R]4      tR# )z
Producer-Consumer Proxy.
)implementer)
interfacesc                      a  ] tR t^t o RtRtRtRtRtRt	Rt
RtR tR tR tR tR	 tR
 tR tR tV 3R lR ltRtV tR# )BasicProducerConsumerProxyaA  
I can act as a man in the middle between any Producer and Consumer.

@ivar producer: the Producer I subscribe to.
@type producer: L{IProducer<interfaces.IProducer>}
@ivar consumer: the Consumer I publish to.
@type consumer: L{IConsumer<interfaces.IConsumer>}
@ivar paused: As a Producer, am I paused?
@type paused: bool
NTFc                b    . V n         Ve$   Wn        VP                  W P                  4       R # R # N)_bufferconsumerregisterProduceriAmStreaming)selfr	   s   &&7/usr/lib/python3/dist-packages/twisted/protocols/pcp.py__init__#BasicProducerConsumerProxy.__init__#   s-    $M%%d,=,=>      c                p    R V n         V P                  '       d   V P                  P                  4        R# R# TN)pausedproducerpauseProducingr   s   &r   r   )BasicProducerConsumerProxy.pauseProducing+   s'    ===MM((* r   c                F   R V n         V P                  '       dE   V P                  P                  RP	                  V P                  4      4       . V P                  R&   MV P
                  '       g   RV n        V P                  e   V P                  P                  4        R# R# )F NNNTN)	r   r   r	   writejoinr   outstandingPullr   resumeProducingr   s   &r   r   *BasicProducerConsumerProxy.resumeProducing0   sq    <<<MM 56 DLLO$$$'+$==$MM))+ %r   c                z    V P                   e   V P                   P                  4        V P                  e   V =R # R # r   )r   stopProducingr	   r   s   &r   r!   (BasicProducerConsumerProxy.stopProducing=   s0    ==$MM'')==$ %r   c                   V P                   '       g%   V P                  '       g0   V P                  '       g   V P                  P	                  V4       R # V P
                  e%   V P
                  P                  V4       RV n        R # R # )NF)r   r   r   r   appendr	   r   r   datas   &&r   r    BasicProducerConsumerProxy.writeE   s\    ;;;t0009M9M9MLL%]]&MM%#(D  'r   c                v    V P                   e   V P                   P                  4        V P                  4        R # r   )r	   finishunregisterProducerr   s   &r   r)   !BasicProducerConsumerProxy.finishN   s(    ==$MM  "!r   c                    Wn         W n        R # r   )r   producerIsStreamingr   r   	streamings   &&&r   r
   +BasicProducerConsumerProxy.registerProducerS   s     #, r   c                    V P                   e   V = V =V P                  '       d   V P                  P                  4        R # R # r   )r   r-   r	   r*   r   s   &r   r*   -BasicProducerConsumerProxy.unregisterProducerW   s5    ==$(===MM,,. r   c                    < V ^8  d   QhRS[ /# )   return)str)format__classdict__s   "r   __annotate__'BasicProducerConsumerProxy.__annotate__^   s     I I# Ir   c                V    R V P                    R\        V 4      R RV P                   R2# )<@xz around >)	__class__idr	   r   s   &r   __repr__#BasicProducerConsumerProxy.__repr__^   s,    4>>"!BtHQ<xaHHr   )r   r	   r   r   r   r-   )__name__
__module____qualname____firstlineno____doc__r	   r   r-   r   r   r   stoppedr   r   r   r!   r   r)   r
   r*   rB   __static_attributes____classdictcell__r8   s   @r   r   r      sd     	 HHLOFG?+
,)"
-/I Ir   r   c                   T   a  ] tR t^bt o RtRtRtRtR tR t	R t
R tR tR tR	tV tR
# )ProducerConsumerProxyzProducerConsumerProxy with a finite buffer.

When my buffer fills up, I have my parent Producer pause until my buffer
has room in it again.
Fc                    R V n         R# r   )r   r   s   &r   r   $ProducerConsumerProxy.pauseProducingo   s     r   c                R   R V n         V P                  '       d{   RP                  V P                  4      pV P                  V4      pV\	        V4      8  d/   WR pV P
                  '       d   Q R4       hV.V P                  R&   M. V P                  R&   M^ pV P                  '       dC   V'       d;   V P                  '       g)   V P                  e   V P                  P                  4        V P
                  '       g   V'       * V n	        V P                  e   \        R V P                   4       4      pV P                  '       d4   W@P                  8  d$   R V n        V P                  P                  4        R# V P                  '       d   V P                  P                  4        R# R# R# )Fr   N.Streaming producer did not write all its data.r   c              3   8   "   T F  p\        V4      x  K  	  R # 5ir   len.0ss   & r   	<genexpr>8ProducerConsumerProxy.resumeProducing.<locals>.<genexpr>        =1A   )r   r   r   _writeSomeDatarU   r   unregisteredr	   r*   r   r   sumproducerPaused
bufferSizer   )r   r&   	bytesSentunsentbytesBuffereds   &    r   r   %ProducerConsumerProxy.resumeProducingt   sH   <<<774<<(D++D1I3t9$j))))DCD)#)(Q"$QI LLL)MM,,.   '0=D ==$===M """(G&+#--/%%% --/ & %r   c                   V P                   '       g%   V P                  '       g/   V P                  '       g   V P                  P	                  V4       MV P
                  ex   V P                  '       d   Q R4       hV P                  V4      pRV n        V\        V4      8X  g7   V P                  '       d   Q R4       hV P                  P	                  WR  4       V P                  ef   V P                  '       dR   \        R V P                   4       4      pW0P                  8  d$   V P                  P                  4        RV n        R # R # R # R # )Nz9Writing fresh data to consumer before my buffer is empty!FrR   c              3   8   "   T F  p\        V4      x  K  	  R # 5ir   rT   rV   s   & r   rY   .ProducerConsumerProxy.write.<locals>.<genexpr>   r[   r\   T)r   r   r   r   r$   r	   r]   rU   r   r-   r_   ra   r   r`   )r   r&   rb   rd   s   &&  r   r   ProducerConsumerProxy.write   s   ;;;t0009M9M9MLL%]]&LLLKJK  ++D1I#(D D	))))DCD)##D$45MM%4+C+C+C===M/,,.&*# 0 ,D%r   c                t    R V n         \        P                  WV4       V'       g   VP                  4        R# R# )FN)r^   r   r
   r   r.   s   &&&r   r
   &ProducerConsumerProxy.registerProducer   s.    !"33DIN$$& r   c                    V P                   e   V = V =RV n        V P                  '       d1   V P                  '       g   V P                  P                  4        R # R # R # )NT)r   r-   r^   r	   r   r*   r   s   &r   r*   (ProducerConsumerProxy.unregisterProducer   sG    ==$( ===MM,,. ".=r   c                n    V P                   f   ^ # V P                   P                  V4       \        V4      # )zPWrite as much of this data as possible.

@returns: The number of bytes written.
)r	   r   rU   r%   s   &&r   r]   $ProducerConsumerProxy._writeSomeData   s-    
 == D!4yr   )r   r   r`   r^   Ni   )rD   rE   rF   rG   rH   ra   r`   r^   r   r   r   r
   r*   r]   rJ   rK   rL   s   @r   rN   rN   b   s?      JNL
+0Z+8'/ r   rN   N)	rH   zope.interfacer   twisted.internetr   	IProducer	IConsumerr   rN    r   r   <module>ru      sT   
 ' ' Z!!:#7#78PI PI 9PIfq6 qr   