
     hd              	          d Z ddl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
 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 ddlmZ ddlmZ ddlmZmZmZ ddlm Z  dZ! e"ed          Z#dZ$dZ%dZ& e e'          Z(e(j)        Z*dZ+dZ,dZ-ej.        ej/        ej0        ej1        ej2        ej3        ej4        ej5        dZ6 G d de          Z7 ej8        e7            edd           d             Z9d e$e
e:e;fd!Z<d" Z=d# Z> e>d$           G d% d&                      Z? e>d'           G d( d)                      Z@ G d* d+          ZAd, ZBd- ZCdS ).a  In-memory representation of cluster state.

This module implements a data-structure used to keep
track of the state of a cluster of workers and the tasks
it is working on (by consuming events).

For every event consumed the state is updated,
so the state represents the state of the cluster
at the time of the last event.

Snapshots (:mod:`celery.events.snapshot`) can be used to
take "pictures" of this state at regular intervals
to for example, store that in a database.
    N)defaultdict)Callable)datetime)Decimal)islice)
itemgetter)time)Mapping)WeakSetref)	timetuple)cached_property)states)LRUCachememoizepass1)
get_logger)WorkerTaskStateheartbeat_expirespypy_version_info      zmSubstantial drift from %s may mean clocks are out of sync.  Current drift is %s seconds.  [orig: %s recv: %s]z4<State: events={0.event_count} tasks={0.task_count}>z9<Worker: {0.hostname} ({0.status_string} clock:{0.clock})z4<Task: {0.name}({0.uuid}) {0.state} clock:{0.clock}>)sentreceivedstartedfailedretried	succeededrevokedrejectedc                   (     e Zd ZdZ fdZd Z xZS )CallableDefaultdicta  :class:`~collections.defaultdict` with configurable __call__.

    We use this for backwards compatibility in State.tasks_by_type
    etc, which used to be a method but is now an index instead.

    So you can do::

        >>> add_tasks = state.tasks_by_type['proj.tasks.add']

    while still supporting the method call::

        >>> add_tasks = list(state.tasks_by_type(
        ...     'proj.tasks.add', reverse=True))
    c                 H    || _          t                      j        |i | d S N)funsuper__init__)selfr'   argskwargs	__class__s       O/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/celery/events/state.pyr)   zCallableDefaultdict.__init___   s,    $)&)))))    c                      | j         |i |S r&   )r'   )r*   r+   r,   s      r.   __call__zCallableDefaultdict.__call__c   s    tx((((r/   )__name__
__module____qualname____doc__r)   r1   __classcell__)r-   s   @r.   r$   r$   O   sQ         * * * * *) ) ) ) ) ) )r/   r$   i  c                     | d         S Nr    )a_s     r.   <lambda>r<   j   s
    1Q4 r/   )maxsizekeyfunc           	      ~    t          t          | |t          j        |          t          j        |                     d S r&   )warnDRIFT_WARNINGr   fromtimestamp)hostnamedriftlocal_received	timestamps       r.   _warn_driftrG   j   sB     	%			/	/				*	*, , , , ,r/   <   c                 x     |||          r ||          n|} || |          r ||           } | ||dz  z  z   S )z#Return time when heartbeat expires.g      Y@r9   )rF   freqexpire_windowr   float
isinstances         r.   r   r   r   s^     %*T733=55;;;Dz)W%% %E)$$	 3455r/   c                      | di |S )Nr9   r9   )clsfieldss     r.   _depickle_taskrQ   ~   s    3====r/   c                       fd}|S )Nc                 L    fd}|| _         d }|| _        fd}|| _        | S )Nc                     t          || j                  r"t          |           t          |          k    S t          S r&   )rM   r-   getattrNotImplemented)thisotherattrs     r.   __eq__z8with_unique_field.<locals>._decorate_cls.<locals>.__eq__   s=    %00 CtT**geT.B.BBB!!r/   c                 H    |                      |          }|t          u rdn| S NT)rZ   rV   )rW   rX   ress      r.   __ne__z8with_unique_field.<locals>._decorate_cls.<locals>.__ne__   s)    ++e$$C.0044#g=r/   c                 >    t          t          |                     S r&   )hashrU   )rW   rY   s    r.   __hash__z:with_unique_field.<locals>._decorate_cls.<locals>.__hash__   s    d++,,,r/   )rZ   r^   ra   )rO   rZ   r^   ra   rY   s       r.   _decorate_clsz(with_unique_field.<locals>._decorate_cls   sb    	" 	" 	" 	" 	" 
	> 	> 	> 
	- 	- 	- 	- 	-
r/   r9   )rY   rb   s   ` r.   with_unique_fieldrc      s$        $ r/   rC   c                       e Zd ZdZdZeZdZesedz   Z		 	 	 ddZ
d	 Zd
 Zd Zd Zed             Zed             Zeefd            Zed             ZdS )r   zWorker State.   )rC   pidrJ   
heartbeatsclockactive	processedloadavgsw_identsw_versw_sys)event__dict____weakref__NrH   r   c                     || _         || _        || _        |g n|| _        |pd| _        || _        || _        || _        |	| _        |
| _	        || _
        |                                 | _        d S r8   )rC   rf   rJ   rg   rh   ri   rj   rk   rl   rm   rn   _create_event_handlerro   )r*   rC   rf   rJ   rg   rh   ri   rj   rk   rl   rm   rn   s               r.   r)   zWorker.__init__   su     !	 * 2""
Za
" //11


r/   c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        ffS r&   )r-   rC   rf   rJ   rg   rh   ri   rj   rk   rl   rm   rn   r*   s    r.   
__reduce__zWorker.__reduce__   sE    ~tx $T[ $dm $T[ : : 	:r/   c                      t           j         j         j         j        j         j        j        d d d t          t          t          t          j
        t          f fd	}|S )Nc	                    |pi }|                                 D ]\  }	}
 |	|
           | dk    r	g d d <   d S |r|sd S  | ||           ||          z
            }||k    rt          j        |||           |rH |          }|dz
  k    r d           |r|d         k    r |           d S  ||           d S d S )Noffline   r   )itemsrG   rC   )type_rF   rE   rP   	max_driftabsintinsortlenkvrD   hearts_set	hb_appendhb_pophbmaxrg   r*   s                r.   ro   z+Worker._create_event_handler.<locals>.event   s=    \rF ! !1T1a    	!! "
111% Y FCC//##i..@AA9$$u .	; ; ;! ; S__F	))q			 ;.:b>"A"A!	.11111z>:::::; ;r/   )object__setattr__heartbeat_maxrg   popappendHEARTBEAT_DRIFT_MAXr   r   bisectr   r   )r*   ro   r   r   r   r   rg   s   ` @@@@@r.   rs   zWorker._create_event_handler   s    !"_
$O*	#'!%d/ScC	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;0 r/   c                 ~    |rt          |fi |n|}|                                D ]\  }}t          | ||           d S r&   )dictr|   setattr)r*   fkwdr   r   s         r.   updatezWorker.update   sV    &DMMbMMMQGGII 	  	 DAqD!Q	  	 r/   c                 6    t                               |           S r&   )R_WORKERformatru   s    r.   __repr__zWorker.__repr__   s    t$$$r/   c                     | j         rdndS )NONLINEOFFLINEaliveru   s    r.   status_stringzWorker.status_string   s    :4xx94r/   c                 N    t          | j        d         | j        | j                  S )Nr{   )r   rg   rJ   rK   ru   s    r.   r   zWorker.heartbeat_expires   s*     !4!%D,>@ @ 	@r/   c                 P    t          | j        o |            | j        k               S r&   )boolrg   r   )r*   nowfuns     r.   r   zWorker.alive   s%    DOI43I(IJJJr/   c                 ,    d                     |           S )Nz{0.hostname}.{0.pid})r   ru   s    r.   idz	Worker.id   s    %,,T222r/   )NNrH   Nr   NNNNNN)r2   r3   r4   r5   r   HEARTBEAT_EXPIRE_WINDOWrK   _fieldsPYPY	__slots__r)   rv   rs   r   r   propertyr   r   r	   r   r   r9   r/   r.   r   r      s       M+M#G  CBB	57BFBF2 2 2 2 : : :  B     
% % % 5 5 X5 @ @ X@  K K K XK 3 3 X3 3 3r/   r   uuidc                      e Zd ZdZdxZxZxZxZxZxZ	xZ
xZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZZej        ZdZ dZ!e"sdZ#ej$        diZ%dZ&ddZ'dddej(        e)e*j+        ej,        fd	Z-dd
Z.d Z/d Z0d Z1d Z2d Z3d Z4e5d             Z6e5d             Z7e5d             Z8e9d             Z:e9d             Z;dS )r   zTask State.Nr   )r   namestater   r   r   r"   r    r   r   r!   r+   r,   etaexpiresretriesworkerresult	exceptionrF   runtime	tracebackexchangerouting_keyrh   clientrootroot_idparent	parent_idchildren)rp   rq   )r   r+   r,   r   r   r   r   r   )r+   r,   r   r   r   r   r   r   r   r   r   r   c                     | _         | _         j        #t           fd|pdD                        _        nt                       _         j         j         j        d _        |r j        	                    |           d S d S )Nc              3   r   K   | ]1}|j         j        v j         j                            |          V  2d S r&   )cluster_statetasksget).0task_idr*   s     r.   	<genexpr>z Task.__init__.<locals>.<genexpr>'  sT       $ $d0666 "(,,W556666$ $r/   r9   )r   r   r   )
r   r   r   r   _serializable_children_serializable_root_serializable_parent_serializer_handlersrp   r   )r*   r   r   r   r,   s   `    r.   r)   zTask.__init__#  s    	*)# $ $ $ $'~2$ $ $  DMM $IIDM3+/%
 %
!
  	)M  (((((	) 	)r/   c	                   
 |pi } ||          }	|	 || ||           n|                                 }	|	|k    re| j        |k    rZ ||	           || j                  k    r=| j                            |	          

 
fd|                                D             }n|                    |	|           | j                            |           d S )Nc                 $    i | ]\  }}|v 	||S r9   r9   )r   r   r   keeps      r.   
<dictcomp>zTask.event.<locals>.<dictcomp>J  s+       !QqDyyAqyyyr/   )r   rF   )upperr   merge_rulesr   r|   r   rp   )r*   r}   rF   rE   rP   
precedencer   task_event_to_stateRETRYr   r   s             @r.   ro   z
Task.event6  s    2 $#E**GD%++++KKMME E>>djE11
5!!JJtz$:$:::#''..D   %+\\^^   MMM;;; 	V$$$$$r/   c                 f     sg n j         n fd}t           |                      S )z;Information about this task suitable for on-screen display.Nc               3      K   t                    t                    z   D ]} t          | d           }|| |fV  d S r&   )listrU   )keyvalueextrarP   r*   s     r.   _keyszTask.info.<locals>._keysX  sY      F||d5kk1 % %c400$u*$$$% %r/   )_info_fieldsr   )r*   rP   r   r   s   ``` r.   infoz	Task.infoS  s[    *U&,n""&	% 	% 	% 	% 	% 	% 	% EEGG}}r/   c                 6    t                               |           S r&   )R_TASKr   ru   s    r.   r   zTask.__repr__`  s    }}T"""r/   c                 b     t           j         j        j         fd j        D             S )Nc           	      Z    i | ]'}|  |t                      |                    (S r9   )r   )r   r   r   handlerr*   s     r.   r   z Task.as_dict.<locals>.<dictcomp>f  sI     
 
 
34A wwq%  T1..
 
 
r/   )r   __getattribute__r   r   r   )r*   r   r   s   `@@r.   as_dictzTask.as_dictc  sO    %+/
 
 
 
 
 
8<
 
 
 	
r/   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r9   r   )r   tasks     r.   
<listcomp>z/Task._serializable_children.<locals>.<listcomp>k  s    222D222r/   )r   r*   r   s     r.   r   zTask._serializable_childrenj  s    22DM2222r/   c                     | j         S r&   )r   r   s     r.   r   zTask._serializable_rootm  s
    |r/   c                     | j         S r&   )r   r   s     r.   r   zTask._serializable_parentp  s
    ~r/   c                 F    t           | j        |                                 ffS r&   )rQ   r-   r   ru   s    r.   rv   zTask.__reduce__s  s    ???r/   c                     | j         S r&   )r   ru   s    r.   r   zTask.idv  s
    yr/   c                 6    | j         | j        n| j         j        S r&   )r   r   r   ru   s    r.   originzTask.originz  s    "k1t{{t{~Er/   c                 (    | j         t          j        v S r&   r   r   READY_STATESru   s    r.   readyz
Task.ready~  s    zV000r/   c                 l    	 | j         o| j        j        j        | j                  S # t          $ r Y d S w xY wr&   )r   r   r   dataKeyErrorru   s    r.   r   zTask.parent  sF    	>Sd&8&>&CDN&SS 	 	 	44	   "% 
33c                 l    	 | j         o| j        j        j        | j                  S # t          $ r Y d S w xY wr&   )r   r   r   r   r   ru   s    r.   r   z	Task.root  sF    	<OD$6$<$A$,$OO 	 	 	44	r   )NNN)NN)<r2   r3   r4   r5   r   r   r   r   r    r   r   r!   r"   r+   r,   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   PENDINGr   rh   r   r   r   RECEIVEDr   r   r)   r   r   TASK_EVENT_TO_STATEr   r   ro   r   r   r   r   r   r   rv   r   r   r   r   r   r   r   r9   r/   r.   r   r      sv       
 AEED E8 Ed EW Ey E6 EG EEE!E$*E-0E3:E=DEEE#E&/E29E<EE 	E E ")E ,5vNEEG  0/	 	 
KL) ) ) )& &*$t*G"5"9% % % %:   # # #
 
 
3 3 3    @ @ @   X F F XF 1 1 X1   _   _  r/   r   c                       e Zd ZdZeZeZdZdZdZ	 	 	 	 	 ddZ	e
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efdZd!dZd"dZeZd"dZd"dZd Zd Z d Z!d Z"dS )#r   zRecords clusters state.r   re   N  '  c                    || _         |t          |          n|| _        |t          |          n|| _        |g n|| _        || _        || _        || _        || _        t          j
                    | _        i | _        t                      | _        i | _        |                                  t#          | j        t&                    | _        | j                            t-          |	| j                             t#          | j        t&                    | _        | j                            t-          |
| j                             d S r&   )event_callbackr   workersr   	_taskheapmax_workers_in_memorymax_tasks_in_memoryon_node_joinon_node_leave	threadingLock_mutexhandlersset_seen_types_tasks_to_resolverebuild_taskheapr$   _tasks_by_typer   tasks_by_typer   !_deserialize_Task_WeakSet_Mapping_tasks_by_workertasks_by_worker)r*   callbackr  r   taskheapr  r  r  r  r  r  s              r.   r)   zState.__init__  sV   
 '"? !!677707 	  2333,1 	
'/X%:"#6 (*n&&55!#0* *!!-mTZHH	J 	J 	J  3!7 ,  ,##-otzJJ	L 	L 	L 	L 	Lr/   c                 *    |                                  S r&   )_create_dispatcherru   s    r.   _eventzState._event  s    &&(((r/   c                     |                     dd          }| j        5  	  ||i ||r|                                  cd d d            S # |r|                                  w w xY w# 1 swxY w Y   d S )Nclear_afterF)r   r  _clear)r*   r'   r+   r,   r  s        r.   freeze_whilezState.freeze_while  s    jj66[ 	" 	""sD+F++ "KKMMM	" 	" 	" 	" 	" 	" 	" 	"  "KKMMMM"		" 	" 	" 	" 	" 	" 	" 	" 	" 	"s'   A&A
A&
A##A&&A*-A*Tc                 n    | j         5  |                     |          cd d d            S # 1 swxY w Y   d S r&   )r  _clear_tasksr*   r   s     r.   clear_taskszState.clear_tasks  s    [ 	, 	,$$U++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   *..c                     |rRd |                                  D             }| j                                         | j                            |           n| j                                         g | j        d d <   d S )Nc                 @    i | ]\  }}|j         t          j        v||S r9   r   )r   r   r   s      r.   r   z&State._clear_tasks.<locals>.<dictcomp>  s8       )tT:V%888 d888r/   )	itertasksr   clearr   r  )r*   r   in_progresss      r.   r   zState._clear_tasks  s     	 -1^^-=-=  K JJk****Jqqqr/   c                 ~    | j                                          |                     |           d| _        d| _        d S r8   )r  r'  r   event_count
task_countr!  s     r.   r  zState._clear  s=    %   r/   c                 n    | j         5  |                     |          cd d d            S # 1 swxY w Y   d S r&   )r  r  r!  s     r.   r'  zState.clear  }    [ 	& 	&;;u%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r#  c                     	 | j         |         }|r|                    |           |dfS # t          $ r  | j        |fi |x}| j         |<   |dfcY S w xY w)zsGet or create worker by hostname.

        Returns:
            Tuple: of ``(worker, was_created)`` pairs.
        FT)r  r   r   r   )r*   rC   r,   r   s       r.   get_or_create_workerzState.get_or_create_worker  s    	 \(+F &f%%%5=  	  	  	 .9dk/$ /$"/$ /$ $FT\(+4<	 s   '* &AAc                     	 | j         |         dfS # t          $ r( |                     ||           x}| j         |<   |dfcY S w xY w)zGet or create task by uuid.Fr   T)r   r   r   )r*   r   r   s      r.   get_or_create_taskzState.get_or_create_task  se    	:d#U** 	 	 	&*iiDi&I&IID4:d#:	s    /AAc                 n    | j         5  |                     |          cd d d            S # 1 swxY w Y   d S r&   )r  r  )r*   ro   s     r.   ro   zState.event  r-  r#  c           	          |                      t          |d                    d|g                              d         S )Deprecated, use :meth:`event`.-r   typer   r  r   joinr*   r}   rP   s      r.   
task_eventzState.task_event  s6    {{4SXXvuo-F-FGGGHHKKr/   c           	          |                      t          |d                    d|g                              d         S )r5  r6  r   r7  r   r9  r;  s      r.   worker_eventzState.worker_event  s7    {{4SXXx6G-H-HIIIJJ1MMr/   c                    	
  j         j         j        t          ddd          t          ddddd           j        j        j         j         j        z   j	        j
         j         j        c j         j        c j         j        cj        j        j        j        c
 j        j         j        j        	t(          t*          t,          j        df	
 fd	}|S )NrC   rF   rE   r   rh   Tc                    %xj         dz  c_         r %|            | d                             d          \  }}}	  |          } |||           |fS # |$ r Y nw xY w|dk    r	  +|           \  }	}
}|dk    }	  !|	          d}}n+# |$ r# |r |	          d}}n |	          x},|	<   Y nw xY w|                    ||
||            #r|s|dk    r #|           $r#|r! $|           ,                    |	d            ||f|fS # |$ r Y d S w xY w|dk    r$ (|           \  }}	}
}}|d	k    }	  |          d}}n# |$ r  |%
          x}'|<   d}Y nw xY w|r|	|_        nJ	  !|	          }n# |$ r  |	          x},|	<   Y nw xY w||_        ||r|                    d ||
           |r|	n|j        }t          &          }|dz   "k    r *d            |||
|t          |                    }|r|&d         k    r )|           n |&|           |dk    r%xj	        dz  c_	        |                    ||
||            |j
        }|I |           |r< |                              |             |	                              |           |j        rN	 %j        |j                 }|j                            |           n # |$ r %                    |           Y nw xY w	 %j                            |          }|j                            |           n# |$ r Y nw xY w||f|fS d S )Nrz   r8  r6  r   ry   Fonliner   r   r1  Tr   r{   r   )r*  	partitionro   r   r   r   r   r   r   r+  r   addr   r   r   _add_pending_task_childr  r   )-ro   r   r   r   createdgroupr;   subjectr   rC   rF   rE   
is_offliner   r   rh   is_client_eventr   task_createdr   heapstimetup	task_nameparent_task	_childrenr   r   add_typer  get_handlerget_taskget_task_by_type_setget_task_by_worker_set
get_workermax_events_in_heapr  r  r*   r  r   tfields	th_appendth_popwfieldsr  s-                            r.   r  z(State._create_dispatcher.<locals>._event!  s    ! ,tU+++ %f 7 7 < <E1g8%+e,, ww..77    
   6:A'%..7Hi ")I!5JJ*4*X*>*># J J J% J.4fX.>.>GFF9?9I9IIFWX%6	J
 LL)^UKKK# - -Gx4G4G$V,,,$ 4 4%f---Hd333"G,g55#     DD$ &*1'%..(x")V"3()1$,DD ( ( ()-d$)G)G)GGD5;#'LLL( # 	F"*DKKF!+H!5!5# F F F5;VH5E5EE!2!2!2F"(DK)n)T>9EEE%4C&) H19111F1III $)E9fc$iiHH .Wx|33Ig&&&&F8W---j((OOq(OO

7I~uEEE I	(HY'''# C,,Y77;;DAAA..x88<<TBBB> 77&*j&@ $,006666 $ ; ; ;44T:::::;4 $ 6 : :4 @ @I M((3333     D
 l+W44u !s~    A A! A!+D B %B76B7DD=E E'&E'5F FF5K" "K?>K?L8 8M ?M )r  __getitem__r  r   r  r   r   r  heap_multiplierr  rC  r  r  r   r   r  r   r   r  r  r   r   r   r   )r*   r  r   r   rP  r  rQ  rR  rS  rT  rU  rV  r  r  r  r   rW  rX  rY  rZ  r  s   ` @@@@@@@@@@@@@@@@@@@r.   r  zState._create_dispatcher  s    m/,Z6FGGVZ-w8 8>O	
 "58LL#'&*&79K#mj$)t,&|79O
H#1=!%!5!A ' -]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5| r/   c                     	 | j         |j                 }n-# t          $ r  t                      x}| j         |j        <   Y nw xY w|                    |           d S r&   )r  r   r   r   rC  )r*   r   chs      r.   rD  zState._add_pending_task_child  si    	D'7BB 	D 	D 	D:A))CB'777	D
ts    '??c                     fd| j                                         D             x}| j        d d <   |                                 d S )Nc           
      d    g | ],} |j         |j        |j        t          |                    -S r9   )rh   rF   r   r   )r   tr   s     r.   r   z*State.rebuild_taskheap.<locals>.<listcomp>  sE     $
 $
 $
 Iagq{AHc!ff==$
 $
 $
r/   )r   valuesr  sort)r*   r   heaps    ` r.   r  zState.rebuild_taskheap  s^    $
 $
 $
 $
Z&&(($
 $
 $
 	
t~aaa  			r/   c              #      K   t          | j                                                  D ]\  }}|V  |r|dz   |k    r d S d S )Nrz   )	enumerater   r|   )r*   limitindexrows       r.   r&  zState.itertasks  s`      #DJ$4$4$6$677 	 	JE3III e++	 	r/   c              #      K   | j         }|rt          |          }t                      }t          |d|          D ]:} |d                     }|&|j        }||vr||fV  |                    |           ;dS )zkGenerator yielding tasks ordered by time.

        Yields:
            Tuples of ``(uuid, Task)``.
        r      N)r  reversedr  r   r   rC  )r*   rg  reverse_heapseenevtupr   r   s           r.   tasks_by_timezState.tasks_by_time  s        	$UOOEuuE1e,, 	# 	#E58::Dyt##*$$$HHTNNN	# 	#r/   c                 f    t          fd|                     |          D             d|          S )zGet all tasks by type.

        This is slower than accessing :attr:`tasks_by_type`,
        but will be ordered by time.

        Returns:
            Generator: giving ``(uuid, Task)`` pairs.
        c              3   <   K   | ]\  }}|j         k    ||fV  d S r&   )r   )r   r   r   r   s      r.   r   z'State._tasks_by_type.<locals>.<genexpr>  sC       # #jdD	T!! D\!!!!# #r/   rm  r   r   rq  )r*   r   rg  rm  s    `  r.   r  zState._tasks_by_type  sR     # # # #D,>,>w,>,O,O # # #u
 
 	
r/   c                 f    t          fd|                     |          D             d|          S )znGet all tasks by worker.

        Slower than accessing :attr:`tasks_by_worker`, but ordered by time.
        c              3   F   K   | ]\  }}|j         j        k    ||fV  d S r&   )r   rC   )r   r   r   rC   s      r.   r   z)State._tasks_by_worker.<locals>.<genexpr>  sF       2 2jdD$00 D\00002 2r/   rt  r   ru  )r*   rC   rg  rm  s    `  r.   r  zState._tasks_by_worker  sR    
 2 2 2 2D,>,>w,>,O,O 2 2 2u
 
 	
r/   c                 *    t          | j                  S )z%Return a list of all seen task types.)sortedr  ru   s    r.   
task_typeszState.task_types  s    d&'''r/   c                 H    d | j                                         D             S )z+Return a list of (seemingly) alive workers.c              3   (   K   | ]}|j         	|V  d S r&   r   )r   ws     r.   r   z&State.alive_workers.<locals>.<genexpr>  s)      <<aAG<<<<<<<r/   )r  rb  ru   s    r.   alive_workerszState.alive_workers  s$    <<4<..00<<<<r/   c                 6    t                               |           S r&   )R_STATEr   ru   s    r.   r   zState.__repr__  s    ~~d###r/   c                     | j         | j        | j        | j        d | j        | j        | j        | j        t          | j	                  t          | j
                  f
fS r&   )r-   r  r  r   r  r  r  r  _serialize_Task_WeakSet_Mappingr  r  ru   s    r.   rv   zState.__reduce__  sX    ~tz4&(@t1+D,>??+D,@AA 
 
 	
r/   )
NNNNr   r   NNNN)Tr&   r\   )#r2   r3   r4   r5   r   r   r*  r+  r\  r)   r   r  r  r"  r   r  r'  r/  r2  ro   r<  r>  r  rD  r   r  r&  rq  tasks_by_timestampr  r  rz  r~  r   rv   r9   r/   r.   r   r     s       !!FDKJO $48AF2659	L L L L> ) ) _)" " ", , , ,
 
 
 
   & & & &        & & &L L LN N Ny y yv   *3       # # # #$ '
 
 
 
	
 	
 	
 	
( ( (= = =$ $ $
 
 
 
 
r/   r   c                 >    d |                                  D             S )Nc                 .    i | ]\  }}|d  |D             S )c                     g | ]	}|j         
S r9   r   )r   ra  s     r.   r   z>_serialize_Task_WeakSet_Mapping.<locals>.<dictcomp>.<listcomp>  s    '''A14'''r/   r9   )r   r   r   s      r.   r   z3_serialize_Task_WeakSet_Mapping.<locals>.<dictcomp>  s-    KKKKD%D'''''KKKr/   r|   )mappings    r.   r  r    s    KK7==??KKKKr/   c                 L    | pi } fd|                                  D             S )Nc                 N    i | ]!\  }}|t          fd |D                       "S )c              3   0   K   | ]}|v |         V  d S r&   r9   )r   ir   s     r.   r   z?_deserialize_Task_WeakSet_Mapping.<locals>.<dictcomp>.<genexpr>  s+      >>q1::%(::::>>r/   )r   )r   r   idsr   s      r.   r   z5_deserialize_Task_WeakSet_Mapping.<locals>.<dictcomp>  sL     . . .c '>>>>C>>>>> . . .r/   r  )r  r   s    `r.   r  r    s?    mG. . . .$]]__. . . .r/   )Dr5   r   sysr	  collectionsr   collections.abcr   r   decimalr   	itertoolsr   operatorr   r	   typingr
   weakrefr   r   kombu.clocksr   kombu.utils.objectsr   celeryr   celery.utils.functionalr   r   r   celery.utils.logr   __all__hasattrr   r   r   rA   r2   loggerwarningr@   r  r   r   r   r   STARTEDFAILUREr   SUCCESSREVOKEDREJECTEDr   r$   registerrG   rL   rM   r   rQ   rc   r   r   r   r  r  r9   r/   r.   <module>r     sl     



     # # # # # # $ $ $ $ $ $                                                     " " " " " " / / / / / /       < < < < < < < < < < ' ' ' ' ' '
: ws'((
    ' 
 
H		~
@F	? N~n|~	 	 ) ) ) ) )+ ) ) )0  % & & & 	//000, , 10, ')$;%Uz	6 	6 	6 	6    . :Z3 Z3 Z3 Z3 Z3 Z3 Z3 Z3z 6X X X X X X X XvB
 B
 B
 B
 B
 B
 B
 B
J
L L L. . . . .r/   