
     h+                        d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ dZ eed          Z G d de          Z  G d d          Z! G d de!          Z"dS )zIntegration testing utilities.    N)defaultdict)partial)count)AnyCallableDictSequenceTextIOTupleretry_over_time)states)TimeoutError)AsyncResult	ResultSet)truncate)humanize_secondsz4Still waiting for {0}.  Trying again {when}: {exc!r}T)microsecondsc                       e Zd ZdZdS )SentinelzSignifies the end of something.N)__name__
__module____qualname____doc__     Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/celery/contrib/testing/manager.pyr   r      s        ))))r   r   c                       e Zd ZdZ	 	 d'dZd(dZd Z	 	 	 	 	 	 	 	 	 d)dZ	 	 	 d*dZd Z	d+dZ
d,dZd-dZd-dZ	 	 d.dZ	 	 d/dZ	 	 d0dZ	 d-d Zed!             Zd-d"Zd# Zd$ Zd-d%Zd& ZdS )1ManagerMixinz.Mixin that adds :class:`Manager` capabilities.      @FNc                     |t           j        n|| _        |t           j        n|| _        | j                                        j        | _        || _        || _        d S N)	sysstdoutstderrapp
connectionrecoverable_connection_errors
connerrorsblock_timeoutno_join)selfr*   r+   r$   r%   s        r   _init_managerzManagerMixin._init_manager   sQ     %+Ncjj$*Ncjj(--//M*r   -c                 :    t          | | | j                   d S )N)file)printr$   )r,   sseps      r   remarkzManagerMixin.remark'   s%    kakk,,,,,,r   c                     d |D             S )Nc                 B    g | ]}|j         |j        j        v|j         S r   )idbackend_cache).0ress     r   
<listcomp>z0ManagerMixin.missing_results.<locals>.<listcomp>-   s+    HHH3svS[5G'G'G'G'G'Gr   r   )r,   rs     r   missing_resultszManagerMixin.missing_results+   s    HH!HHHHr   thingr   
   皙?      ?      @c           
      R     |si n|} fd}  j         ||f||||||	d|S )zWait for event to happen.

        The `catch` argument specifies the exception that means the event
        has not happened yet.
        c           
          t          |          }r?                    t                              t	          |dd          |                      r | ||           |S )Nin )whenexc)nextwarnE_STILL_WAITINGformatr   )rI   	intervalsretriesintervaldescemit_warningerrbackr,   s       r   on_errorz'ManagerMixin.wait_for.<locals>.on_errorF   sz    IH 		/00/$DD# 1       0Xw///Or   )argskwargsrS   max_retriesinterval_startinterval_stepr   )r,   funcatchrQ   rU   rV   rS   rW   rX   rY   interval_maxrR   optionsrT   s   `  `  `    `  r   wait_forzManagerMixin.wait_for/   s    * "-v	 	 	 	 	 	 	 	 $t#
f+)	
 

 
 
 	
r      {Gz?      ?c	           
      V    	 |                      ||||||||          S # |$ r Y dS w xY w)z;Make sure something does not happen (at least for a while).)rQ   rW   rX   rY   r\   rR   zShould not have happened: N)r^   AssertionError)
r,   rZ   r[   rQ   rW   rX   rY   r\   rR   r]   s
             r   ensure_not_for_a_whilez#ManagerMixin.ensure_not_for_a_whileX   sZ    		F==U;-]) !   
  	 	 	DD	s    ((c                     t          |i |S r"   r   )r,   rU   rV   s      r   r   zManagerMixin.retry_over_timei   s    ////r   c                   	 | j         rd S t          |t                    s| j                            |g          }g 		fd}|rt	          |          nt          d          D ]}g 	d d <   	  |j        d	||d|c S # t          j        t          f$ r}| 
                    |          }|                     d                    t          |          t          	          z
  t          |          t          d                    |                    |          d           Y d }~d }~w| j        $ r#}|                     d|d           Y d }~d }~ww xY wt#          d          )
Nc                 2                         |            d S r"   )append)task_idvaluereceiveds     r   	on_resultz$ManagerMixin.join.<locals>.on_results   s    OOG$$$$$r   r   )callback	propagatez#Still waiting for {}/{}: [{}]: {!r}z, !zjoin: connection lost: z!Test failed: Missing task resultsr   )r+   
isinstancer   r&   ranger   getsockettimeoutr   r>   r4   rM   lenr   joinr)   rc   )
r,   r=   rn   rW   rV   rl   irI   waiting_forrk   s
            @r   rv   zManagerMixin.joinl   s   < 	F!Y'' 	(""A3''A	% 	% 	% 	% 	% (3@{###a 	D 	DAHQQQK
DquOi9OOOOOOONL1   "221559@@AX.A ;!7!788#? ?@C       
 ? D D D=c==sCCCCCCCCD@AAAs%   ,A>>EBD$$E1EE      @c                 B    | j         j                            |          S Nrt   )r&   controlinspect)r,   rt   s     r   r~   zManagerMixin.inspect   s    x'''888r   c              #   |   K    |                      |          j        | pi }|                                E d {V  d S r"   )r~   
query_taskitems)r,   idsrt   taskss       r   query_taskszManagerMixin.query_tasks   sL      0W%%0#6<";;==         r   c                     t          t                    }|                     ||          D ]=\  }}|                                D ]#\  }\  }}||                             |           $>|S r{   )r   setr   r   add)	r,   r   rt   r   hostnamereplyri   state_s	            r   query_task_stateszManagerMixin.query_task_states   sz    S!!#//W/EE 	+ 	+OHe',{{}} + +#%u!!'****+r    waiting for tasks to be acceptedc                 0     | j         | j        |f||d|S N)rP   rQ   assert_task_worker_stateis_acceptedr,   r   rP   rQ   policys        r   assert_acceptedzManagerMixin.assert_accepted   8    ,t,c
,44
 
CI
 
 	
r    waiting for tasks to be receivedc                 0     | j         | j        |f||d|S r   r   r   s        r   assert_receivedzManagerMixin.assert_received   r   r   ,waiting for tasks to be started or completedc                 0     | j         | j        |f||d|S r   )assert_task_state_from_resultis_result_task_in_progress)r,   async_resultsrP   rQ   r   s        r   ,assert_result_tasks_in_progress_or_completedz9ManagerMixin.assert_result_tasks_in_progress_or_completed   s?     2t1+
 D
 
 -3
 
 	
r   c                 X     | j         t          | j        |||          t          ffi |S r{   r^   r   true_or_raiser   )r,   rZ   resultsrP   r   s        r   r   z*ManagerMixin.assert_task_state_from_result   sA    t}D&WhGGGK
 
!
 
 	
r   c                 j    t           j        t           j        ft          fd| D                       S )Nc              3   *   K   | ]}|j         v V  d S r"   )r   )r:   resultpossible_statess     r   	<genexpr>z:ManagerMixin.is_result_task_in_progress.<locals>.<genexpr>   s*      IIv6<?2IIIIIIr   )r   STARTEDSUCCESSall)r   rV   r   s     @r   r   z'ManagerMixin.is_result_task_in_progress   s4    !>6>:IIIIIIIIIIr   c                 X     | j         t          | j        |||          t          ffi |S r{   r   )r,   rZ   r   rP   r   s        r   r   z%ManagerMixin.assert_task_worker_state   sA    t}D&S(CCCK
 
!
 
 	
r   c                 $     | j         g d|fi |S )N)reservedactiveready_ids_matches_stater,   r   rV   s      r   is_receivedzManagerMixin.is_received   s1    &t&+++S< <4:< < 	<r   c                 $     | j         ddg|fi |S )Nr   r   r   r   s      r   r   zManagerMixin.is_accepted   s$    &t&'':CJJ6JJJr   c                 l    |                      ||          t          fd|D                       S )Nr|   c              3   h   K   | ]+t          fd fdD             D                       V  ,dS )c              3       K   | ]}|v V  	d S r"   r   )r:   r2   ts     r   r   z<ManagerMixin._ids_matches_state.<locals>.<genexpr>.<genexpr>   s'      EE1QEEEEEEr   c                      g | ]
}|         S r   r   )r:   kr   s     r   r<   z=ManagerMixin._ids_matches_state.<locals>.<genexpr>.<listcomp>   s     D D Dq D D Dr   N)any)r:   r   expected_statesr   s    @r   r   z2ManagerMixin._ids_matches_state.<locals>.<genexpr>   sj       
 
 EEEE D D D DO D D DEEEEE
 
 
 
 
 
r   )r   r   )r,   r   r   rt   r   s    `  @r   r   zManagerMixin._ids_matches_state   sY    ''W'== 
 
 
 
 

 
 
 
 
 	
r   c                 6     ||i |}|st                      |S r"   )r   )r,   rZ   rU   rV   r;   s        r   r   zManagerMixin.true_or_raise   s-    c4"6"" 	**
r   )r    FNN)r.   )	r?   r   NNr@   rA   rB   rC   F)r?   r_   rA   r`   ra   F)Fr@   )ry   )rB   )rB   r   )rB   r   )rB   r   )r   r   r   r   r-   r4   r>   r^   rd   r   rv   r~   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r      s       88 8=*.   - - - -I I I '
 '
 '
 '
T :<AE>CF F F F"0 0 0B B B B29 9 9 9! ! ! !    -0?
 
 
 
 -0?
 
 
 
 ?	
 
 
 
 03
 
 
 
 J J \J
 
 
 
< < <K K K
 
 
 
    r   r   c                       e Zd ZdZd ZdS )Managerz(Test helpers for task integration tests.c                 .    || _          | j        di | d S )Nr   )r&   r-   )r,   r&   rV   s      r   __init__zManager.__init__   s(    $$V$$$$$r   N)r   r   r   r   r   r   r   r   r   r      s)        22% % % % %r   r   )#r   rs   r#   collectionsr   	functoolsr   	itertoolsr   typingr   r   r   r	   r
   r   kombu.utils.functionalr   celeryr   celery.exceptionsr   celery.resultr   r   celery.utils.textr   celery.utils.timer   _humanize_secondsrL   	Exceptionr   r   r   r   r   r   <module>r      s   $ $  



 # # # # # #             ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 2 2 2 2 2       * * * * * * 0 0 0 0 0 0 0 0 & & & & & & C C C C C CH7,4@@@ * * * * *y * * *v v v v v v v vr% % % % %l % % % % %r   