o
    |j6h                     @   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)selftransformation
downstream r
   t/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/grpc/framework/foundation/stream_util.py__init__   s   
zTransformingConsumer.__init__c                 C      | j | | d S r   )r   consumer   r   valuer
   r
   r   r          zTransformingConsumer.consumec                 C   s   | j   d S r   )r   	terminater   r
   r
   r   r   #   s   zTransformingConsumer.terminatec                 C   r   r   )r   consume_and_terminater   r   r
   r
   r   r   &   r   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   sX   | j  | jr| j| | j   W d    d S W d    d S 1 s%w   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    d S 1 sw   Y  d S NF)r   r   r!   r   r
   r
   r   r   8   s   "zIterableConsumer.terminatec                 C   s^   | j " | jr| j| d| _| j   W d    d S W d    d S 1 s(w   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   sd   | j % | jr| js| j   | jr| jr
| jr%| jdW  d    S t 1 s+w   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   	 z|t u r|  n|r|| n|| W n ty0 } zt| W Y d }~nd }~ww | j< |rCd| _	 W d    d S | j	rU| j	
d}| j	 oS| j }n| js]t }d}nd| _	 W d    d S W d    n1 ssw   Y  q)NTFr   )	_NO_VALUEr   r   r   	Exception_LOGGER	exceptionr,   r/   r   r'   r   )r   r0   r   r   er
   r
   r   _spina   s:   

 zThreadSwitchingConsumer._spinc                 C   s   | j 4 | jr'| jr| j| n| j| j| j|d d| _W d    d S W d    d S W d    d S 1 s:w   Y  d S r*   	r,   r   r/   r   r    r.   submitr7   r-   r   r
   r
   r   r   {   s   "zThreadSwitchingConsumer.consumec                 C   sz   | j 0 | jr#d| _| js+| j| j| jtd d| _W d    d S W d    d S W d    d S 1 s6w   Y  d S r*   )r,   r   r/   r.   r9   r7   r-   r2   r   r
   r
   r   r      s   "z!ThreadSwitchingConsumer.terminatec                 C   s   | j 7 | jr*d| _| jr| j| n| j| j| j|d d| _W d    d S W d    d S W d    d S 1 s=w   Y  d S r*   r8   r   r
   r
   r   r      s   "z-ThreadSwitchingConsumer.consume_and_terminateN)	r   r   r   r   r   r7   r   r   r   r
   r
   r
   r   r)   T   s    
	r)   )r   loggingr   grpc.framework.foundationr   objectr2   	getLoggerr   r4   Consumerr   r   r)   r
   r
   r
   r   <module>   s   
*