HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/self/root/usr/lib/python3/dist-packages/twisted/protocols/__pycache__/pcp.cpython-38.pyc
U


W[��@sLdZddlmZddlmZeejej�Gdd�d��ZGdd�de�ZdS)	z
Producer-Consumer Proxy.
�)�implementer)�
interfacesc@steZdZdZdZdZdZdZdZdZ	dZ
dd�Zdd�Zd	d
�Z
dd�Zd
d�Zdd�Zdd�Zdd�Zdd�ZdS)�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
    NTFcCs&g|_|dk	r"||_|�||j�dS�N)�_buffer�consumer�registerProducer�iAmStreaming)�selfr�r�7/usr/lib/python3/dist-packages/twisted/protocols/pcp.py�__init__"sz#BasicProducerConsumerProxy.__init__cCsd|_|jr|j��dS�NT)�paused�producer�pauseProducing�r
rrrr*sz)BasicProducerConsumerProxy.pauseProducingcCsTd|_|jr0|j�d�|j��g|jdd�<n|js<d|_|jdk	rP|j��dS)NF�T)	rrr�write�joinr	�outstandingPullr�resumeProducingrrrrr/s
z*BasicProducerConsumerProxy.resumeProducingcCs&|jdk	r|j��|jdk	r"|`dSr)r�
stopProducingrrrrrr<s


z(BasicProducerConsumerProxy.stopProducingcCs@|js|js |js |j�|�n|jdk	r<|j�|�d|_dS�NF)rr	rr�appendrr�r
�datarrrrDs

z BasicProducerConsumerProxy.writecCs |jdk	r|j��|��dSr)r�finish�unregisterProducerrrrrrMs

z!BasicProducerConsumerProxy.finishcCs||_||_dSr)r�producerIsStreaming�r
rZ	streamingrrrrRsz+BasicProducerConsumerProxy.registerProducercCs&|jdk	r|`|`|jr"|j��dSr)rrrrrrrrrVs

z-BasicProducerConsumerProxy.unregisterProducercCsd|jt|�|jfS)Nz<%s@%x around %s>)�	__class__�idrrrrr�__repr__]sz#BasicProducerConsumerProxy.__repr__)�__name__�
__module__�__qualname__�__doc__rrrr	rrZstoppedr
rrrrrrrr#rrrrrs"

	rc@sLeZdZdZdZdZdZdd�Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�ZdS)�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.
    iFcCs
d|_dSr)rrrrrrmsz$ProducerConsumerProxy.pauseProducingcCs�d|_|jrjd�|j�}|�|�}|t|�krZ||d�}|jrHtd��|g|jdd�<qng|jdd�<nd}|jr�|r�|js�|jdk	r�|j�	�|js�||_
|jdk	r�tdd�|jD��}|j
r�||jkr�d|_
|j��n|j
r�|j��dS)NFr�.Streaming producer did not write all its data.rcSsg|]}t|��qSr��len��.0�srrr�
<listcomp>�sz9ProducerConsumerProxy.resumeProducing.<locals>.<listcomp>)rrr�_writeSomeDatar+r	�AssertionError�unregisteredrrrr�sum�producerPaused�
bufferSizer)r
r�	bytesSentZunsent�
bytesBufferedrrrrrs2
��

z%ProducerConsumerProxy.resumeProducingcCs�|js|js |js |j�|�nV|jdk	rv|jr8td��|�|�}d|_|t|�ksv|jrbtd��|j�||d��|j	dk	r�|j
r�tdd�|jD��}||jkr�|j	�
�d|_dS)Nz9Writing fresh data to consumer before my buffer is empty!Fr)cSsg|]}t|��qSrr*r,rrrr/�sz/ProducerConsumerProxy.write.<locals>.<listcomp>T)rr	rrrrr1r0r+rrr3r5rr4)r
rr6r7rrrr�s$
�
�

zProducerConsumerProxy.writecCs$d|_t�|||�|s |��dSr)r2rrrr rrrr�sz&ProducerConsumerProxy.registerProducercCs2|jdk	r|`|`d|_|jr.|js.|j��dSr)rrr2rrrrrrrr�s
z(ProducerConsumerProxy.unregisterProducercCs"|jdkrdS|j�|�t|�S)z`Write as much of this data as possible.

        @returns: The number of bytes written.
        Nr)rrr+rrrrr0�s
z$ProducerConsumerProxy._writeSomeDataN)
r$r%r&r'r5r4r2rrrrrr0rrrrr(as(r(N)	r'Zzope.interfacerZtwisted.internetrZ	IProducerZ	IConsumerrr(rrrr�<module>s
R