
    g                         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y)
z/Helpful utilities related to the stream module.    N)streamc                   (    e Zd ZdZd Zd Zd Zd Zy)TransformingConsumerzGA stream.Consumer that passes a transformation of its input to another.c                      || _         || _        y N)_transformation_downstream)selftransformation
downstreams      /var/www/html/FastMealFinder_FlaskServer-InitialRelease/venv/lib/python3.12/site-packages/grpc/framework/foundation/stream_util.py__init__zTransformingConsumer.__init__   s    -%    c                 X    | j                   j                  | j                  |             y r   )r	   consumer   r
   values     r   r   zTransformingConsumer.consume    s!      !5!5e!<=r   c                 8    | j                   j                          y r   )r	   	terminater
   s    r   r   zTransformingConsumer.terminate#   s    ""$r   c                 X    | j                   j                  | j                  |             y r   )r	   consume_and_terminater   r   s     r   r   z*TransformingConsumer.consume_and_terminate&   s!    ..t/C/CE/JKr   N)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r      s    Q&>%Lr   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
IterableConsumerzDA Consumer that when iterated over emits the values it has consumed.c                 R    t        j                         | _        g | _        d| _        y )NT)	threading	Condition
_condition_values_activer   s    r   r   zIterableConsumer.__init__-   s     #--/r   c                     | j                   5  | j                  r5| j                  j                  |       | j                   j	                          d d d        y # 1 sw Y   y xY wr   r#   r%   r$   appendnotifyr   s     r   r   zIterableConsumer.consume2   sG    __ 	)||##E*&&(	) 	) 	)s   AAA!c                     | j                   5  d| _        | j                   j                          d d d        y # 1 sw Y   y xY wNF)r#   r%   r)   r   s    r   r   zIterableConsumer.terminate8   s5    __ 	% DLOO""$	% 	% 	%s	   "8Ac                     | j                   5  | j                  r<| j                  j                  |       d| _        | j                   j	                          d d d        y # 1 sw Y   y xY wr+   r'   r   s     r   r   z&IterableConsumer.consume_and_terminate=   sN    __ 	)||##E*$&&(		) 	) 	)s   A	AA(c                     | S r   r   r   s    r   __iter__zIterableConsumer.__iter__D   s    r   c                 "    | j                         S r   )nextr   s    r   __next__zIterableConsumer.__next__G   s    yy{r   c                 >   | j                   5  | j                  r?| j                  s3| j                   j                          | j                  r| j                  s3| j                  r$| j                  j	                  d      cd d d        S t               # 1 sw Y   y xY w)Nr   )r#   r%   r$   waitpopStopIterationr   s    r   r0   zIterableConsumer.nextJ   sr    __ 	&,,t||$$& ,,t||||||''*		& 	& $o%	& 	&s   AB&B	
BBN)r   r   r   r   r   r   r   r   r.   r1   r0   r   r   r   r   r   *   s(    N
)%
)&r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)ThreadSwitchingConsumerz?A Consumer decorator that affords serialization and asynchrony.c                 |    t        j                         | _        || _        || _        d| _        g | _        d| _        y NFT)r!   Lock_lock_sink_pool	_spinningr$   r%   )r
   sinkpools      r   r   z ThreadSwitchingConsumer.__init__W   s5    ^^%


 r   c                    	 	 |t         u r|j                          n%|r|j                  |       n|j                  |       | j                  5  |rd| _        	 d d d        y | j                  r8| j                  j                  d      }| j                   xr | j                   }n&| j                  s	t         }d}nd| _        	 d d d        y d d d        # t        $ r}t
        j                  |       Y d }~d }~ww xY w# 1 sw Y   5xY w)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LL'  %*DN  \\ LL,,Q/E$(LL 0 E5EI%E $I%*DN     %!!!$$% s*   >C C?!A!C?	C<C77C<?Dc                     | j                   5  | j                  ra| j                  r| j                  j	                  |       n9| j
                  j                  | j                  | j                  |d       d| _        d d d        y # 1 sw Y   y xY wr9   	r;   r%   r>   r$   r(   r=   submitrG   r<   r   s     r   r   zThreadSwitchingConsumer.consume{   se    ZZ 	*||>>LL''.JJ%%djj$**eUK%)DN	* 	* 	*s   A.BBc                     | j                   5  | j                  rPd| _        | j                  s=| j                  j	                  | j
                  | j                  t        d       d| _        d d d        y # 1 sw Y   y xY wr9   )r;   r%   r>   r=   rJ   rG   r<   rB   r   s    r   r   z!ThreadSwitchingConsumer.terminate   sZ    ZZ 	*||$~~JJ%%djj$**iN%)DN	* 	* 	*s   AA33A<c                 .   | j                   5  | j                  rhd| _        | j                  r| j                  j	                  |       n9| j
                  j                  | j                  | j                  |d       d| _        d d d        y # 1 sw Y   y xY wr9   rI   r   s     r   r   z-ThreadSwitchingConsumer.consume_and_terminate   sl    ZZ 	*||$>>LL''.JJ%%djj$**eTJ%)DN	* 	* 	*s   A5BBN)	r   r   r   r   r   rG   r   r   r   r   r   r   r7   r7   T   s    I4***r   r7   )r   loggingr!   grpc.framework.foundationr   objectrB   	getLoggerr   rD   Consumerr   r   r7   r   r   r   <module>rR      sa    6   ,H	
'

H
%L6?? L"'&v '&T@*foo @*r   