
    Ng                         d Z ddlZddlZddlmZ  e            Z ej        e          Z	 G d dej
                  Z G d dej
                  Z G d d	ej
                  ZdS )
z/Helpful utilities related to the stream module.    N)streamc                   *    e Zd ZdZd Zd Zd Zd ZdS )TransformingConsumerzGA stream.Consumer that passes a transformation of its input to another.c                 "    || _         || _        d S N)_transformation_downstream)selftransformation
downstreams      a/var/www/html/ai-engine/env/lib/python3.11/site-packages/grpc/framework/foundation/stream_util.py__init__zTransformingConsumer.__init__   s    -%    c                 `    | j                             |                     |                     d S r   )r	   consumer   r
   values     r   r   zTransformingConsumer.consume    s-      !5!5e!<!<=====r   c                 8    | j                                          d S r   )r	   	terminater
   s    r   r   zTransformingConsumer.terminate#   s    ""$$$$$r   c                 `    | j                             |                     |                     d S r   )r	   consume_and_terminater   r   s     r   r   z*TransformingConsumer.consume_and_terminate&   s-    ..t/C/CE/J/JKKKKKr   N)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r      s[        QQ& & &> > >% % %L L L L Lr   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
IterableConsumerzDA Consumer that when iterated over emits the values it has consumed.c                 R    t          j                    | _        g | _        d| _        d S )NT)	threading	Condition
_condition_values_activer   s    r   r   zIterableConsumer.__init__-   s$    #-//r   c                     | j         5  | j        r3| j                            |           | j                                          d d d            d S # 1 swxY w Y   d S r   r#   r%   r$   appendnotifyr   s     r   r   zIterableConsumer.consume2   s    _ 	) 	)| )##E***&&(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   ;AAAc                     | j         5  d| _        | j                                          d d d            d S # 1 swxY w Y   d S NF)r#   r%   r)   r   s    r   r   zIterableConsumer.terminate8   s    _ 	% 	% DLO""$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   !6::c                     | j         5  | j        r:| j                            |           d| _        | j                                          d d d            d S # 1 swxY w Y   d S r+   r'   r   s     r   r   z&IterableConsumer.consume_and_terminate=   s    _ 	) 	)| )##E***$&&(((		) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AAAAc                     | S r   r   r   s    r   __iter__zIterableConsumer.__iter__D   s    r   c                 *    |                                  S r   )nextr   s    r   __next__zIterableConsumer.__next__G   s    yy{{r   c                    | j         5  | j        r.| j        s'| j                                          | j        r| j        '| j        r&| j                            d          cd d d            S t                      # 1 swxY w Y   d S )Nr   )r#   r%   r$   waitpopStopIterationr   s    r   r0   zIterableConsumer.nextJ   s    _ 	& 	&, 't| '$$&&& , 't| '| &|''**		& 	& 	& 	& 	& 	& 	& 	& $oo%	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   AA9+A99A= A=N)r   r   r   r   r   r   r   r   r.   r1   r0   r   r   r   r   r   *   s        NN  
) ) )% % %
) ) )    & & & & &r   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )ThreadSwitchingConsumerz?A Consumer decorator that affords serialization and asynchrony.c                 |    t          j                    | _        || _        || _        d| _        g | _        d| _        d S NFT)r!   Lock_lock_sink_pool	_spinningr$   r%   )r
   sinkpools      r   r   z ThreadSwitchingConsumer.__init__W   s:    ^%%


 r   c                     	 	 |t           u r|                                 n-|r|                    |           n|                    |           n1# t          $ r$}t
                              |           Y d }~nd }~ww xY w| j        5  |rd| _        	 d d d            d S | j	        r+| j	        
                    d          }| j	         o| j         }n&| j        s
t           }d}nd| _        	 d d d            d S d d d            n# 1 swxY w Y   )NTFr   )	_NO_VALUEr   r   r   	Exception_LOGGER	exceptionr;   r>   r$   r4   r%   )r
   r?   r   r   es        r   _spinzThreadSwitchingConsumer._spina   s   	%I%%NN$$$$ (..u5555LL''' % % %!!!$$$$$$$$%    %*DN        \  L,,Q//E$(L 0 E5EII %E $II%*DN                      	s1   AA 
A=A88A=DADD
Dc                     | j         5  | j        rP| j        r| j                            |           n.| j                            | j        | j        |d           d| _        d d d            d S # 1 swxY w Y   d S r9   	r;   r%   r>   r$   r(   r=   submitrG   r<   r   s     r   r   zThreadSwitchingConsumer.consume{   s    Z 	* 	*| *> *L''....J%%dj$*eUKKK%)DN	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AA--A14A1c                     | j         5  | j        rAd| _        | j        s3| j                            | j        | j        t          d           d| _        d d d            d S # 1 swxY w Y   d S r9   )r;   r%   r>   r=   rJ   rG   r<   rB   r   s    r   r   z!ThreadSwitchingConsumer.terminate   s    Z 	* 	*| *$~ *J%%dj$*iNNN%)DN	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A	AA"%A"c                    | j         5  | j        rWd| _        | j        r| j                            |           n.| j                            | j        | j        |d           d| _        d d d            d S # 1 swxY w Y   d S r9   rI   r   s     r   r   z-ThreadSwitchingConsumer.consume_and_terminate   s    Z 	* 	*| *$> *L''....J%%dj$*eTJJJ%)DN	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AA44A8;A8N)	r   r   r   r   r   rG   r   r   r   r   r   r   r7   r7   T   se        II    4* * ** * ** * * * *r   r7   )r   loggingr!   grpc.framework.foundationr   objectrB   	getLoggerr   rD   Consumerr   r   r7   r   r   r   <module>rR      s    6 5      , , , , , ,FHH	
'
H
%
%L L L L L6? L L L"'& '& '& '& '&v '& '& '&T@* @* @* @* @*fo @* @* @* @* @*r   