Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/twisted/protocols/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/twisted/protocols/__pycache__/pcp.cpython-37.pyc

B

�'�\��@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
�H/opt/alt/python37/lib64/python3.7/site-packages/twisted/protocols/pcp.py�__init__"sz#BasicProducerConsumerProxy.__init__cCsd|_|jr|j��dS)NT)�paused�producer�pauseProducing)r	r
r
rr*sz)BasicProducerConsumerProxy.pauseProducingcCsTd|_|jr0|j�d�|j��g|jdd�<n|js<d|_|jdk	rP|j��dS)NF�T)	r
rr�write�joinr�outstandingPullr�resumeProducing)r	r
r
rr/s
z*BasicProducerConsumerProxy.resumeProducingcCs&|jdk	r|j��|jdk	r"|`dS)N)r�
stopProducingr)r	r
r
rr<s


z(BasicProducerConsumerProxy.stopProducingcCs@|js|js |js |j�|�n|jdk	r<|j�|�d|_dS)NF)r
rrr�appendrr)r	�datar
r
rrDs

z BasicProducerConsumerProxy.writecCs |jdk	r|j��|��dS)N)r�finish�unregisterProducer)r	r
r
rrMs

z!BasicProducerConsumerProxy.finishcCs||_||_dS)N)r�producerIsStreaming)r	r�	streamingr
r
rrRsz+BasicProducerConsumerProxy.registerProducercCs&|jdk	r|`|`|jr"|j��dS)N)rrrr)r	r
r
rrVs

z-BasicProducerConsumerProxy.unregisterProducercCsd|jt|�|jfS)Nz<%s@%x around %s>)�	__class__�idr)r	r
r
r�__repr__]sz#BasicProducerConsumerProxy.__repr__)�__name__�
__module__�__qualname__�__doc__rrrrrr
�stoppedrrrrrrrrrr
r
r
rrs"
	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|_dS)NT)r
)r	r
r
rrmsz$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)NFrz.Streaming producer did not write all its data.rcSsg|]}t|��qSr
)�len)�.0�sr
r
r�
<listcomp>�sz9ProducerConsumerProxy.resumeProducing.<locals>.<listcomp>)r
rr�_writeSomeDatar%r�AssertionError�unregisteredrrrr�sum�producerPaused�
bufferSizer)r	r�	bytesSentZunsent�
bytesBufferedr
r
rrrs.



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!Fz.Streaming producer did not write all its data.cSsg|]}t|��qSr
)r%)r&r'r
r
rr(�sz/ProducerConsumerProxy.write.<locals>.<listcomp>T)r
rrrrrr*r)r%rrr,r.rr-)r	rr/r0r
r
rr�s 



zProducerConsumerProxy.writecCs$d|_t�|||�|s |��dS)NF)r+rrr)r	rrr
r
rr�sz&ProducerConsumerProxy.registerProducercCs2|jdk	r|`|`d|_|jr.|js.|j��dS)NT)rrr+rrr)r	r
r
rr�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%)r	rr
r
rr)�s
z$ProducerConsumerProxy._writeSomeDataN)
rr r!r"r.r-r+rrrrrr)r
r
r
rr$as(r$N)	r"Zzope.interfacerZtwisted.internetrZ	IProducerZ	IConsumerrr$r
r
r
r�<module>sS