
    `f/                     |   d Z ddlmZ ddl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mZ dd
lmZ 	 ddlmZ efZn# e$ r dZY nw xY wdZdZdZdZ ee          Zd Zd Z G d de          Z G d d          Z  G d de!          Z" G d de"          Z# G d de#          Z$ G d de$          Z%dS ) z0A directed acyclic graph of reusable components.    )deque)Event)ignore_errors)bytes_to_strsymbol_by_name   )DependencyGraphGraphFormatter)instantiatequalname)
get_logger)GreenletExit )	BlueprintStepStartStopStepConsumerStep      c                     d| j          d| S )Nz| z: alias)nsfmts     B/var/www/html/env/lib/python3.11/site-packages/celery/bootsteps.py_prer      s    !!!C!!!    c                 D    | j                             dd          d         S )N.r	   )namersplit)ss    r   _labelr%   #   s    6==a  $$r   c                   >    e Zd ZdZdZdZddddZd Zd	 Zd
 Z	d Z
dS )StepFormatterz'Graph formatter for :class:`Blueprint`.u   ⧉u   ∘parallelogram
slategray4
slategray3)shapecolor	fillcolorc           	          |o]d                     |                     |          t          |j        pt	          |                              dd                              S )Nz{}{}zutf-8ignore)format_get_prefixr   labelr%   encodeselfsteps     r   r2   zStepFormatter.label2   s_     
T""+vd||33GXFFH H
 
 	
r   c                 >    |j         r| j        S |j        r| j        S dS )N )lastblueprint_prefixconditionalconditional_prefixr4   s     r   r1   zStepFormatter._get_prefix9   s.    9 	)(( 	+**rr   c                 Z    |j         r| j        n| j        }|                     |||          S N)r9   blueprint_schemenode_scheme	draw_node)r5   objattrsschemes       r   nodezStepFormatter.node@   s/    *-(H&&8H~~c65111r   c                 x    |j         r|                    dd           |                     ||| j        |          S )Nnonedarkseagreen3)	arrowheadr,   )r9   update	draw_edgeedge_scheme)r5   abrC   s       r   edgezStepFormatter.edgeD   s>    6 	BLL6LAAA~~aD$4e<<<r   N)__name__
__module____qualname____doc__r:   r<   r?   r2   r1   rE   rO   r   r   r   r'   r'   '   sx        11 ! 
 
 
  2 2 2= = = = =r   r'   c                       e Zd ZdZeZdZdZdZ e	            Z
ddededediZ	 	 d dZd	 Zd
 Zd Zd Z	 	 d!dZ	 d"dZd#dZd$dZd Zd Zd Zd Zd Zd Zd Zd Zd Z e!d             Z"dS )%r   a  Blueprint containing bootsteps that can be applied to objects.

    Arguments:
        steps Sequence[Union[str, Step]]: List of steps.
        name (str): Set explicit name for this blueprint.
        on_start (Callable): Optional callback applied after blueprint start.
        on_close (Callable): Optional callback applied before blueprint close.
        on_stopped (Callable): Optional callback applied after
            blueprint stopped.
    Nr   initializingrunningclosingterminatingc                    |p"| j         pt          t          |                     | _         t          |pg           t          | j                  z  | _        || _        || _        || _        t                      | _
        i | _        d S r>   )r"   r   typesetdefault_stepstypeson_starton_close
on_stoppedr   shutdown_completesteps)r5   rb   r"   r^   r_   r`   s         r   __init__zBlueprint.__init__c   sr    =DI=$t**)=)=	"%%D,>(?(??
  $!&


r   c                 D   t           | _        | j        r|                                  t          d |j        D                       D ]Y\  }}|                     d|j                   |dz   | _        |                    |           t          
                    d           Zd S )Nc              3      K   | ]}||V  	d S r>   r   .0r$   s     r   	<genexpr>z"Blueprint.start.<locals>.<genexpr>q   s"       J JqAMMMMM J Jr   zStarting %sr	   z^-- substep ok)RUNstater^   	enumeraterb   _debugr   startedstartloggerdebug)r5   parentir6   s       r   rn   zBlueprint.startm   s    
= 	MMOOO  J JFL J J JJJ 	+ 	+GAtKKtz222q5DLJJvLL)****		+ 	+r   c                 *    | j         | j        pd         S Nr   )state_to_namerj   r5   s    r   human_statezBlueprint.human_statew   s    !$*/22r   c                 r    i }|j         D ],}|                    |                    |          pi            -|S r>   )rb   rJ   info)r5   rq   ry   r6   s       r   ry   zBlueprint.infoz   sC    L 	1 	1DKK		&))/R0000r   c                 n    | j         r|                                   |                     |ddd           d S )NcloserW   F)reverse)r_   send_allr5   rq   s     r   r{   zBlueprint.close   s9    = 	MMOOOfgy%@@@@@r   stop
restartingFc                 8    |                      ||||           d S )N)	propagate)r}   )r5   rq   methoddescriptionr   s        r   restartzBlueprint.restart   s"    ffkYGGGGGr   Tr   c                    |p|                     dd          }|rt          |j                  n|j        }|D ]}|rt          ||d           }	|	u|                     d|                                |j                   	  |	|g|R   P# t          $ r/}
|r t          	                    d||j        |
           Y d }
~
d }
~
ww xY wd S )N_ z%s %s...zError on %s %s: %r)
replacereversedrb   getattrrl   
capitalizer   	Exceptionro   	exception)r5   rq   r   r   r|   r   argsrb   r6   funexcs              r   r}   zBlueprint.send_all   s3   !=V^^C%=%=*1C&&&v| 	P 	PD PdFD11?KK
 + 6 6 8 8$*F F FPF*T*****$ P P P$ "!((0+tz3P P P P P P P PP	P 	Ps   >	B
C%B<<Cc                    |rdnd}| j         t          t          fv rd S | j         t          k    s| j        t          |j                  k    r't          | _         | j                                         d S | 	                    |           t          | _         | 
                    ||rdnd|d           | j        r|                                  t          | _         | j                                         d S )NrX   stopping	terminater   F)r   r   )rj   CLOSE	TERMINATEri   rm   lenrb   ra   r[   r{   r   r`   )r5   rq   r{   r   whats        r   r   zBlueprint.stop   s     )9}}z:%+++F:FL0A0A A A"DJ"&&(((F

6
98KK& 	 	
 	
 	

 ? 	OO
""$$$$$r   c                 `    	 | j                             |           d S # t          $ r Y d S w xY w)N)timeout)ra   waitIGNORE_ERRORS)r5   r   s     r   joinzBlueprint.join   sK    	 "'''88888 	 	 	DD	s    
--c                    |                      d           g x}| _        |                                 x}| _        |                      d           |                     |          D ]*} ||fi |}|||j        <   |                    |           +|                      dd                    d | j        D                                  |D ]}|                    |           | S )ar  Apply the steps in this blueprint to an object.

        This will apply the ``__init__`` and ``include`` methods
        of each step, with the object as argument::

            step = Step(obj)
            ...
            step.include(obj)

        For :class:`StartStopStep` the services created
        will also be added to the objects ``steps`` attribute.
        zPreparing bootsteps.zBuilding graph...zNew boot order: {%s}z, c              3   $   K   | ]}|j         V  d S r>   r   rf   s     r   rh   z"Blueprint.apply.<locals>.<genexpr>   s$      ::!ag::::::r   )	rl   orderclaim_stepsrb   _finalize_stepsr"   appendr   include)r5   rq   kwargsr   rb   Sr6   s          r   applyzBlueprint.apply   s    	*+++
!--///
'(((%%e,, 	 	A1V&&v&&D#E$)LL*II::tz:::::	< 	< 	< 	! 	!DLL    r   c                     | j         j                            |j         j                   | j                             t	          |j        d                   t	          | j        d                              d S )Nr   r!   )graphadjacentrJ   add_edgerZ   r   )r5   others     r   connect_withzBlueprint.connect_with   sZ    
""5;#7888
DQ00$tz"~2F2FGGGGGr   c                     | j         |         S r>   )rb   )r5   r"   s     r   __getitem__zBlueprint.__getitem__   s    z$r   c                 d    t          d | j                                        D             d           S )Nc              3   (   K   | ]}|j         	|V  d S r>   )r9   rg   Cs     r   rh   z'Blueprint._find_last.<locals>.<genexpr>   s)      >>1qv>Q>>>>>>r   )nextrb   valuesrv   s    r   
_find_lastzBlueprint._find_last   s/    >>
 1 1 3 3>>>EEEr   c                 r   |                                 D ]}d |j        D             |_        t          d |                                 D                       }|r\|                                D ]C}t	          |          }|j        | j        vr
|||j        <   |                    |j                   D|Zd S d S )Nc                 ,    g | ]}t          |          S r   r   )rg   deps     r   
<listcomp>z(Blueprint._firstpass.<locals>.<listcomp>   s     JJJS^C00JJJr   c              3   $   K   | ]}|j         V  d S r>   requires)rg   r6   s     r   rh   z'Blueprint._firstpass.<locals>.<genexpr>   s$      @@t}@@@@@@r   )r   r   r   popleftr   r"   rb   r   )r5   rb   r6   streamrE   s        r   
_firstpasszBlueprint._firstpass   s    LLNN 	K 	KDJJDMJJJDMM@@@@@@@ 	-(( - -%d++9DJ..'+E$)$dm,,,,  	- 	- 	- 	- 	-r   c                    |                                  }|                     |           d |                                D             }t          ||                     |                    x}| _        |r!|D ]}||k    r|                    ||           	 |                                S # t          $ r}t          d|z            d }~ww xY w)Nc              3   (   K   | ]}||j         fV  d S r>   r   r   s     r   rh   z,Blueprint._finalize_steps.<locals>.<genexpr>   s(      66!q!*o666666r   )root)	formatterzunknown bootstep: %s)	r   r   r   r
   r   r   r   topsortKeyError)r5   rb   r9   itGrB   r   s          r   r   zBlueprint._finalize_steps   s      66u||~~666($--4-88
 
 
 	
DJ  	* * *$;;JJtS)))	999;; 	9 	9 	91C7888	9s   B, ,
C6CCc                 D     t           fd j        D                       S )Nc              3   B   K   | ]}                     |          V  d S r>   )	load_step)rg   r6   r5   s     r   rh   z(Blueprint.claim_steps.<locals>.<genexpr>   s/      @@TDNN4((@@@@@@r   )dictr]   rv   s   `r   r   zBlueprint.claim_steps   s(    @@@@TZ@@@@@@r   c                 2    t          |          }|j        |fS r>   )r   r"   r4   s     r   r   zBlueprint.load_step   s    d##y$r   c                 B    t          j        t          | |          g|R  S r>   )ro   rp   r   )r5   msgr   s      r   rl   zBlueprint._debug  s"    |DsOO3d3333r   c                      t          |           S r>   )r%   rv   s    r   r   zBlueprint.alias  s    d||r   )NNNNN)r   r   F)NTTr   )TFr>   )#rP   rQ   rR   rS   r'   r   r"   rj   rm   r[   r\   ri   r   r   ru   rc   rn   rw   ry   r{   r   r}   r   r   r   r   r   r   r   r   r   r   rl   propertyr   r   r   r   r   r   J   s       	 	 #NDEGCEEM	>Yy=	M )-:>   + + +3 3 3  A A A
 &,49H H H H
 GIP P P P$% % % %.     8H H H     F F F	- 	- 	-9 9 9 A A A  4 4 4   X  r   r   c                   6     e Zd ZdZdZdZ fdZd Zd Z xZ	S )StepTypezMeta-class for steps.Nc                     |                     d          }|r| d| n|}|                    ||                     d          p|           t                                          | |||          S )NrQ   r    r"   )rR   r"   )getrJ   super__new__)clsr"   basesrC   moduleqname	__class__s         r   r   zStepType.__new__  s    <((&,66""D"""$6""+e 	 	
 	
 	
 wwsD%777r   c                     | j         S r>   )r"   r   s    r   __str__zStepType.__str__  s	    xr   c                 ,    d                     |           S )Nzstep:{0.name}{{{0.requires!r}}})r0   r   s    r   __repr__zStepType.__repr__  s    077<<<r   )
rP   rQ   rR   rS   r"   r   r   r   r   __classcell__)r   s   @r   r   r   
  sf        DH8 8 8 8 8  = = = = = = =r   r   c                   p    e Zd ZdZdZdZdZdZdZdZ	d Z
d Zd Zd	 Zd
 Zd Zd Zed             Zd ZdS )r   zA Bootstep.

    The :meth:`__init__` method is called when the step
    is bound to a parent object, and can as such be used
    to initialize attributes in the parent object at
    parent instantiation-time.
    NFr   Tc                     d S r>   r   )r5   rq   r   s      r   rc   zStep.__init__?      r   c                     | j         S )zReturn true if bootstep should be included.

        You can define this as an optional predicate that decides whether
        this step should be created.
        )enabledr~   s     r   
include_ifzStep.include_ifB  s     |r   c                 "    t          |g|R i |S r>   )r   )r5   r"   r   r   s       r   r   zStep.instantiateJ  s     41$111&111r   c                 ^    |                      |          rd|                     |          fS dS )NT)FN)r   creater~   s     r   _should_includezStep._should_includeM  s2    ??6"" 	-V,,,,{r   c                 8    |                      |          d         S rt   )r   r~   s     r   r   zStep.includeR  s    ##F++A..r   c                     dS )zCreate the step.Nr   r~   s     r   r   zStep.createU  s      r   c                     d| j          dS )Nz<step: >r   rv   s    r   r   zStep.__repr__X  s    &&&&&r   c                 .    | j         pt          |           S r>   )r2   r%   rv   s    r   r   z
Step.alias[  s    z)VD\\)r   c                     d S r>   r   )r5   rB   s     r   ry   z	Step.info_  r   r   )rP   rQ   rR   rS   r"   r2   r;   r   r9   r   rc   r   r   r   r   r   r   r   r   ry   r   r   r   r   r      s          D E K H D G    2 2 2  
/ / /  ' ' ' * * X*    r   r   )	metaclassc                   4    e Zd ZdZdZd Zd Zd Zd Zd Z	dS )r   z3Bootstep that must be started and stopped in order.Nc                 F    | j         r| j                                         S d S r>   )rB   rn   r~   s     r   rn   zStartStopStep.startk  s(    8 	$8>>###	$ 	$r   c                 F    | j         r| j                                         S d S r>   )rB   r   r~   s     r   r   zStartStopStep.stopo  s&    8 	#8==??"	# 	#r   c                     d S r>   r   r~   s     r   r{   zStartStopStep.closes  r   r   c                 d    | j         r( t          | j         d| j         j                              S d S )Nr   )rB   r   r   r~   s     r   r   zStartStopStep.terminatev  s9    8 	C@748[$(-@@BBB	C 	Cr   c                 |    |                      |          \  }}|r!|| _        |j                            |            |S r>   )r   rB   rb   r   )r5   rq   increts       r   r   zStartStopStep.includez  sC    ''//S 	&DHL%%%
r   )
rP   rQ   rR   rS   rB   rn   r   r{   r   r   r   r   r   r   r   c  so        ==
 C$ $ $# # #  C C C    r   r   c                   :    e Zd ZdZdZdZd Zd Zd Zd Z	d
d	Z
dS )r   z(Bootstep that starts a message consumer.)z!celery.worker.consumer:ConnectionNc                      t          d          )Nzmissing get_consumers)NotImplementedError)r5   channels     r   get_consumerszConsumerStep.get_consumers  s    !"9:::r   c                     |j                                         }|                     |          | _        | j        pg D ]}|                                 d S r>   )
connectionr   r   	consumersconsume)r5   cr   consumers       r   rn   zConsumerStep.start  s_    ,&&((++G44," 	 	H	 	r   c                 2    |                      |d           d S )NT_closer5   r  s     r   r   zConsumerStep.stop  s    Atr   c                 2    |                      |d           d S )NFr  r
  s     r   shutdownzConsumerStep.shutdown  s    Aur   Tc                     t                      }| j        pg D ]?}|rt          |j        |j                   |j        r|                    |j                   @|D ]}t          |j        |j                   d S r>   )r[   r  r   r  cancelr   addr{   )r5   r  cancel_consumerschannelsr  r   s         r   r	  zConsumerStep._close  s    55," 	/ 	/H =alHO<<< /X-... 	7 	7G!,6666	7 	7r   )T)rP   rQ   rR   rS   r   r  r   rn   r   r  r	  r   r   r   r   r     st        225HI; ; ;      7 7 7 7 7 7r   r   N)&rS   collectionsr   	threadingr   kombu.commonr   kombu.utils.encodingr   kombu.utils.importsr   utils.graphr
   r   utils.importsr   r   	utils.logr   greenletr   r   ImportError__all__ri   r   r   rP   ro   r   r%   r'   r   rZ   r   r   r   r   r   r   r   <module>r     sR   6 6             & & & & & & - - - - - - . . . . . . 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 ! ! ! ! ! !$%%%%%% "OMM    MMM
 A 
		H		" " "% % % =  =  =  =  =N  =  =  =F} } } } } } } }@= = = = =t = = =,@ @ @ @ @X @ @ @ @F    D   >7 7 7 7 7= 7 7 7 7 7s   A AA