ó
    Ö›‘h  ã                   óŠ   • S r SSKJr  SSKJr  \" \R
                  \R                  5       " S S5      5       r " S S\5      rg)	z
Producer-Consumer Proxy.
é    )Úimplementer)Ú
interfacesc                   ór   • \ 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S	 rS
 rS rS rS rS\4S jrSrg)ÚBasicProducerConsumerProxyé   aA  
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                 ó\   • / U l         Ub"  Xl        UR                  X R                  5        g g ©N)Ú_bufferÚconsumerÚregisterProducerÚiAmStreaming)Úselfr   s     ÚYC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/protocols/pcp.pyÚ__init__Ú#BasicProducerConsumerProxy.__init__#   s-   € ØˆŒØÑØ$ŒMØ×%Ñ% d×,=Ñ,=Õ>ð  ó    c                 ój   • SU l         U R                  (       a  U R                  R                  5         g g ©NT)ÚpausedÚproducerÚpauseProducing©r   s    r   r   Ú)BasicProducerConsumerProxy.pauseProducing+   s%   € ØˆŒØ�=�=Ø�M‰M×(Ñ(Õ*ð r   c                 ó<  • SU l         U R                  (       aD  U R                  R                  SR	                  U R                  5      5        / U R                  S S & OU R
                  (       d  SU l        U R                  b  U R                  R                  5         g g )NFÚ T)	r   r
   r   ÚwriteÚjoinr   ÚoutstandingPullr   ÚresumeProducingr   s    r   r   Ú*BasicProducerConsumerProxy.resumeProducing0   sl   € ØˆŒØ�<�<à�M‰M×Ñ §¡¨¯©Ó 5Ô6Ø ˆD�L‰L™‰Oà×$×$Ø'+�Ô$à�=‰=Ñ$Ø�M‰M×)Ñ)Õ+ð %r   c                 ór   • U R                   b  U R                   R                  5         U R                  b  U ?g g r	   )r   ÚstopProducingr   r   s    r   r"   Ú(BasicProducerConsumerProxy.stopProducing=   s0   € Ø�=‰=Ñ$Ø�M‰M×'Ñ'Ô)Ø�=‰=Ñ$Ø‘ð %r   c                 ó  • U R                   (       d"  U R                  (       d-  U R                  (       d  U R                  R	                  U5        g U R
                  b#  U R
                  R                  U5        SU l        g g ©NF)r   r   r   r
   Úappendr   r   ©r   Údatas     r   r   Ú BasicProducerConsumerProxy.writeE   sT   € Ø�;�;˜t×0×0¸×9M×9Mà�L‰L×Ñ Õ%à�]‰]Ñ&Ø�M‰M×Ñ Ô%Ø#(ˆDÕ ð 'r   c                 ór   • U R                   b  U R                   R                  5         U R                  5         g r	   )r   ÚfinishÚunregisterProducerr   s    r   r+   Ú!BasicProducerConsumerProxy.finishN   s(   € Ø�=‰=Ñ$Ø�M‰M× Ñ Ô"Ø×ÑÕ!r   c                 ó   • Xl         X l        g r	   )r   ÚproducerIsStreaming©r   r   Ú	streamings      r   r   Ú+BasicProducerConsumerProxy.registerProducerS   s   € Ø ŒØ#,Õ r   c                 ó~   • U R                   b  U ? U ?U R                  (       a  U R                  R                  5         g g r	   )r   r/   r   r,   r   s    r   r,   Ú-BasicProducerConsumerProxy.unregisterProducerW   s3   € Ø�=‰=Ñ$Ø�ØÐ(Ø�=�=Ø�M‰M×,Ñ,Õ.ð r   Úreturnc                 óV   • SU R                    S[        U 5      S SU R                   S3$ )NÚ<Ú@Ú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,   Ústrr=   Ú__static_attributes__© r   r   r   r      sc   † ñ	ð €HØ€HØÐØ€LØ€OØ€FØ€Gò?ò+ò
,òò)ò"ò
-ò/ðI˜#÷ Ir   r   c                   óH   • \ 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)ÚProducerConsumerProxyéb   zŒProducerConsumerProxy with a finite buffer.

When my buffer fills up, I have my parent Producer pause until my buffer
has room in it again.
i   Fc                 ó   • SU l         g r   )r   r   s    r   r   Ú$ProducerConsumerProxy.pauseProducingo   s   € ð ˆ�r   c                 ó2  • SU l         U R                  (       ax  SR                  U R                  5      nU R                  U5      nU[	        U5      :  a-  XS  nU R
                  (       a   S5       eU/U R                  S S & O/ U R                  S S & OSnU R                  (       a?  U(       a8  U R                  (       d'  U R                  b  U R                  R                  5         U R
                  (       d  U(       + U l	        U R                  b‹  [        S U R                   5       5      nU R                  (       a1  X@R                  :  a"  SU l        U R                  R                  5         g U R                  (       a  U R                  R                  5         g g g )NFr   ú.Streaming producer did not write all its data.r   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr	   ©Úlen©Ú.0Úss     r   Ú	<genexpr>Ú8ProducerConsumerProxy.resumeProducing.<locals>.<genexpr>�   ó   é € Ð=²¨1¤ A§ ²ùó   ‚)r   r
   r   Ú_writeSomeDatarQ   r   Úunregisteredr   r,   r   r   ÚsumÚproducerPausedÚ
bufferSizer   )r   r(   Ú	bytesSentÚunsentÚbytesBuffereds        r   r   Ú%ProducerConsumerProxy.resumeProducingt   s5  € ØˆŒØ�<�<Ø—7‘7˜4Ÿ<™<Ó(ˆDØ×+Ñ+¨DÓ1ˆIØœ3˜t›9Ó$Ø˜jÐ)�à×)×)ðDàCóDØ)à#) (�—‘™Q‘à"$�—‘™Q‘àˆIð ××ÞØ—L—LØ—‘Ñ)à�M‰M×,Ñ,Ô.à× × Ø'0¤=ˆDÔ à�=‰=Ñ$ÜÑ=°·²Ó=Ó=ˆMð ×"×"¨¿¹Ó(Gà&+�Ô#Ø—‘×-Ñ-Õ/Ø×%×%ð —‘×-Ñ-Õ/ð &ð %r   c                 ó~  • U R                   (       d"  U R                  (       d-  U R                  (       d  U R                  R	                  U5        O�U R
                  bt  U R                  (       a   S5       eU R                  U5      nSU l        U[        U5      :X  d5  U R                  (       a   S5       eU R                  R	                  XS  5        U R                  b`  U R                  (       aN  [        S U R                   5       5      nX0R                  :¼  a"  U R                  R                  5         SU l        g g g g )Nz9Writing fresh data to consumer before my buffer is empty!FrN   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr	   rP   rR   s     r   rU   Ú.ProducerConsumerProxy.write.<locals>.<genexpr>¸   rW   rX   T)r   r   r   r
   r&   r   rY   rQ   r   r/   r[   r]   r   r\   )r   r(   r^   r`   s       r   r   ÚProducerConsumerProxy.write¡   sü   € Ø�;�;˜t×0×0¸×9M×9Mà�L‰L×Ñ Õ%à�]‰]Ñ&à—L—LðKàJóKØ ð ×+Ñ+¨DÓ1ˆIØ#(ˆDÔ Ø¤ D£	Ó)à×)×)ðDàCóDØ)à—‘×#Ñ# D¨Ð$4Ô5à�M‰MÑ%¨4×+C×+CÜÑ=°·²Ó=Ó=ˆMØ§¡Ó/Ø—‘×,Ñ,Ô.Ø&*�Õ#ð 0ð ,DÐ%r   c                 ón   • SU l         [        R                  XU5        U(       d  UR                  5         g g r%   )rZ   r   r   r   r0   s      r   r   Ú&ProducerConsumerProxy.registerProducer½   s.   € Ø!ˆÔÜ"×3Ñ3°DÀIÔNÞØ×$Ñ$Õ&ð r   c                 ó°   • U R                   b  U ? U ?SU l        U R                  (       a-  U R                  (       d  U R                  R                  5         g g g r   )r   r/   rZ   r   r
   r,   r   s    r   r,   Ú(ProducerConsumerProxy.unregisterProducerÃ   sC   € Ø�=‰=Ñ$Ø�ØÐ(Ø ˆÔØ�=�= §§Ø�M‰M×,Ñ,Õ.ð ".ˆ=r   c                 ój   • U R                   c  gU R                   R                  U5        [        U5      $ )zPWrite as much of this data as possible.

@returns: The number of bytes written.
r   )r   r   rQ   r'   s     r   rY   Ú$ProducerConsumerProxy._writeSomeDataË   s-   € ð
 �=‰=Ñ ØØ�‰×Ñ˜DÔ!Ü�4‹yÐr   )r   r   r\   rZ   N)r?   r@   rA   rB   rC   r]   r\   rZ   r   r   r   r   r,   rY   rF   rG   r   r   rI   rI   b   s7   † ñð €Jà€NØ€Lòò
+0òZ+ò8'ò/õr   rI   N)	rC   Úzope.interfacer   Útwisted.internetr   Ú	IProducerÚ	IConsumerr   rI   rG   r   r   Ú<module>rp      sT   ðñ
õ 'å 'ñ ˆZ×!Ñ! :×#7Ñ#7Ó8÷PIð PIó 9ðPIôfqÐ6õ qr   