+
    üÐ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'   € ØˆŒØ�=�=ˆ=Ø�M‰M×(Ñ(Ö*ñ 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   € ØˆŒØ�<�<ˆ<à�M‰M×Ñ §¡¨¯©Ó 5Ô6Ø ˆD�L‰L˜ŠOà×$×$Ð$Ø'+�Ô$à�=‰=Ò$Ø�M‰M×)Ñ)Ö+ñ %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   € Ø�=‰=Ò$Ø�M‰M×'Ñ'Ô)Ø�=‰=Ò$Ø’ñ %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¸×9M×9MÐ9Mà�L‰L×Ñ Ö%à�]‰]Ò&Ø�M‰M×Ñ Ô%Ø#(ˆ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(   € Ø�=‰=Ò$Ø�M‰M× Ñ Ô"Ø×ÑÖ!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   € Ø�=‰=Ò$Ø�ØÐ(Ø�=�=ˆ=Ø�M‰M×,Ñ,Ö.ñ 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—>‘>Ð" !¤B t£H¨Q <¨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
# )ÚProducerConsumerProxyzŒProducerConsumerProxy 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  € ØˆŒØ�<�<ˆ<Ø—7‘7˜4Ÿ<™<Ó(ˆDØ×+Ñ+¨DÓ1ˆIØœ3˜t›9Ô$Ø˜jÐ)�à×)×)Ð)ðDàCóDØ)à#) (�—‘˜Q’à"$�—‘˜Q’àˆIð ××ÐßØ—L—L�LØ—‘Ò)à�M‰M×,Ñ,Ô.à× × Ð Ø'0¤=ˆDÔ à�=‰=Ò$ÜÑ=°·²Ó=Ó=ˆMð ×"×"Ð"¨¿¹Ô(Gà&+�Ô#Ø—‘×-Ñ-Ö/Ø×%×%Ð%ð —‘×-Ñ-Ö/ñ &ñ %r   c                óš  € V P                   '       g%   V P                  '       g/   V P                  '       g   V P                  P	                  V4       M…V 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¸×9M×9MÐ9Mà�L‰L×Ñ Õ%à�]‰]Ò&à—L—L�LðKàJóKØ ð ×+Ñ+¨DÓ1ˆIØ#(ˆDÔ Ø¤ D£	Ô)à×)×)Ð)ðDàCóDØ)à—‘×#Ñ# D¨Ð$4Ô5à�M‰MÒ%¨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Ñ3°DÀIÔ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   € Ø�=‰=Ò$Ø�ØÐ(Ø ˆÔØ�=�=ˆ= §§ Ø�M‰M×,Ñ,Ö.ñ ".‰=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Ô!Ü�4‹yÐ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òò
+0òZ+ò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   