a
    !f                     @   sj   d Z ddlZddlZddlmZ e ZeeZ	G dd dej
ZG dd dej
ZG dd	 d	ej
ZdS )
z/Helpful utilities related to the stream module.    N)streamc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )TransformingConsumerzGA stream.Consumer that passes a transformation of its input to another.c                 C   s   || _ || _d S N)_transformation_downstream)selfZtransformationZ
downstream r   f/var/www/html/python-backend/venv/lib/python3.9/site-packages/grpc/framework/foundation/stream_util.py__init__   s    zTransformingConsumer.__init__c                 C   s   | j | | d S r   )r   consumer   r   valuer   r   r	   r       s    zTransformingConsumer.consumec                 C   s   | j   d S r   )r   	terminater   r   r   r	   r   #   s    zTransformingConsumer.terminatec                 C   s   | j | | d S r   )r   consume_and_terminater   r   r   r   r	   r   &   s    z*TransformingConsumer.consume_and_terminateN)__name__
__module____qualname____doc__r
   r   r   r   r   r   r   r	   r      s
   r   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )IterableConsumerzDA Consumer that when iterated over emits the values it has consumed.c                 C   s   t  | _g | _d| _d S )NT)	threading	Condition
_condition_values_activer   r   r   r	   r
   -   s    
zIterableConsumer.__init__c                 C   sF   | j , | jr$| j| | j   W d    n1 s80    Y  d S r   r   r   r   appendnotifyr   r   r   r	   r   2   s    zIterableConsumer.consumec                 C   s:   | j   d| _| j   W d    n1 s,0    Y  d S NF)r   r   r   r   r   r   r	   r   8   s    zIterableConsumer.terminatec                 C   sL   | j 2 | jr*| j| d| _| j   W d    n1 s>0    Y  d S r   r   r   r   r   r	   r   =   s
    z&IterableConsumer.consume_and_terminatec                 C   s   | S r   r   r   r   r   r	   __iter__D   s    zIterableConsumer.__iter__c                 C   s   |   S r   )nextr   r   r   r	   __next__G   s    zIterableConsumer.__next__c                 C   sh   | j N | jr | js | j   q| jr@| jdW  d    S t W d    n1 sZ0    Y  d S )Nr   )r   r   r   waitpopStopIterationr   r   r   r	   r    J   s    zIterableConsumer.nextN)r   r   r   r   r
   r   r   r   r   r!   r    r   r   r   r	   r   *   s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )ThreadSwitchingConsumerz?A Consumer decorator that affords serialization and asynchrony.c                 C   s,   t  | _|| _|| _d| _g | _d| _d S NFT)r   Lock_lock_sink_pool	_spinningr   r   )r   sinkpoolr   r   r	   r
   W   s    
z ThreadSwitchingConsumer.__init__c              
   C   s   z0|t u r|  n|r$|| n
|| W n. ty^ } zt| W Y d }~n
d }~0 0 | jt |rd| _W d    d S | j	r| j	
d}| j	 o| j }n&| jst }d}nd| _W d    d S W d    q 1 s0    Y  q d S )NFr   T)	_NO_VALUEr   r   r   	Exception_LOGGER	exceptionr(   r+   r   r#   r   )r   r,   r   r   er   r   r	   _spina   s(    
 zThreadSwitchingConsumer._spinc                 C   s`   | j F | jr>| jr"| j| n| j| j| j|d d| _W d    n1 sR0    Y  d S r&   	r(   r   r+   r   r   r*   submitr3   r)   r   r   r   r	   r   {   s    zThreadSwitchingConsumer.consumec                 C   sX   | j > | jr6d| _| js6| j| j| jtd d| _W d    n1 sJ0    Y  d S r&   )r(   r   r+   r*   r5   r3   r)   r.   r   r   r   r	   r      s    z!ThreadSwitchingConsumer.terminatec                 C   sf   | j L | jrDd| _| jr(| j| n| j| j| j|d d| _W d    n1 sX0    Y  d S r&   r4   r   r   r   r	   r      s    z-ThreadSwitchingConsumer.consume_and_terminateN)	r   r   r   r   r
   r3   r   r   r   r   r   r   r	   r%   T   s   
	r%   )r   loggingr   Zgrpc.framework.foundationr   objectr.   	getLoggerr   r0   ZConsumerr   r   r%   r   r   r   r	   <module>   s   
*