
    h0d              	          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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)jT                  Z+dZ,dZ-dZ.ej^                  ej`                  ejb                  ejd                  ejf                  ejh                  ejj                  ejl                  dZ7 G d de      Z8 ejr                  e8        edd       d        Z:d e%e
e;e<fd!Z=d" Z>d# Z? e?d$       G d% d&             Z@ e?d'       G d( d)             ZA G d* d+      ZBd, ZCd- ZDy).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Optional)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                 2    || _         t        |   |i | y N)funsuper__init__)selfr(   argskwargs	__class__s       O/var/www/Befach/backend/env/lib/python3.12/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    txx(((r0   )__name__
__module____qualname____doc__r*   r2   __classcell__)r.   s   @r/   r%   r%   O   s    *)r0   r%   i  c                     | d   S Nr    )a_s     r/   <lambda>r=   j   s    1Q4r0   )maxsizekeyfunc           	      v    t        t        | |t        j                  |      t        j                  |             y r'   )warnDRIFT_WARNINGr   fromtimestamp)hostnamedriftlocal_received	timestamps       r/   _warn_driftrH   j   s.     	%				/					*,r0   <   c                 `     |||      r ||      n|} || |      r ||       } | ||dz  z  z   S )z#Return time when heartbeat expires.g      Y@r:   )rG   freqexpire_windowr   float
isinstances         r/   r   r   r   sA     %T735;D)W%)$	 3455r0   c                      | di |S )Nr:   r:   )clsfieldss     r/   _depickle_taskrR   ~   s    ==r0   c                       fd}|S )Nc                 8    fd}|| _         fd}|| _        | S )Nc                 n    t        || j                        rt        |       t        |      k(  S t        S r'   )rN   r.   getattrNotImplemented)thisotherattrs     r/   __eq__z8with_unique_field.<locals>._decorate_cls.<locals>.__eq__   s0    %0tT*geT.BBB!!r0   c                 .    t        t        |             S r'   )hashrV   )rX   rZ   s    r/   __hash__z:with_unique_field.<locals>._decorate_cls.<locals>.__hash__   s    d+,,r0   )r[   r^   )rP   r[   r^   rZ   s      r/   _decorate_clsz(with_unique_field.<locals>._decorate_cls   s"    	" 
	-
r0   r:   )rZ   r_   s   ` r/   with_unique_fieldr`      s     r0   rD   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y)r   zWorker State.   )rD   pidrK   
heartbeatsclockactive	processedloadavgsw_identsw_versw_sys)event__dict____weakref__Nc                     || _         || _        || _        |g n|| _        |xs d| _        || _        || _        || _        |	| _        |
| _	        || _
        | j                         | _        y r9   )rD   rc   rK   rd   re   rf   rg   rh   ri   rj   rk   _create_event_handlerrl   )r+   rD   rc   rK   rd   re   rf   rg   rh   ri   rj   rk   s               r/   r*   zWorker.__init__   sl     !	 * 2"
Za
" //1
r0   c                    | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  ffS r'   )r.   rD   rc   rK   rd   re   rf   rg   rh   ri   rj   rk   r+   s    r/   
__reduce__zWorker.__reduce__   s]    ~~txx $T[[ $dmm $T[[ : : 	:r0   c                     t         j                   j                   j                   j                  j                   j                  j
                  d d d t        t        t        t        j                  t        f fd	}|S )Nc	                 L   |xs i }|j                         D ]  \  }	}
 |	|
        | dk(  rg d d  y |r|sy  | ||       ||      z
        }||kD  rt        j                  |||       |r5 |      }|dz
  kD  r d       |r|d   kD  r	 |       y  ||       y y )Noffline   r   )itemsrH   rD   )type_rG   rF   rQ   	max_driftabsintinsortlenkvrE   hearts_set	hb_appendhb_pophbmaxrd   r+   s                r/   rl   z+Worker._create_event_handler.<locals>.event   s     \rF1T1a  '	! "
1%YC/#i.@A9$u .	;! _F	)q	.:b>"A!.1z>: "r0   )object__setattr__heartbeat_maxrd   popappendHEARTBEAT_DRIFT_MAXr|   r}   bisectr~   r   )r+   rl   r   r   r   r   rd   s   ` @@@@@r/   rp   zWorker._create_event_handler   si    !!""__
$$OO**	#'!%d/ScC	; 	;0 r0   c                 n    |rt        |fi |n|}|j                         D ]  \  }}t        | ||        y r'   )dictry   setattr)r+   fkwdr   r   s         r/   updatezWorker.update   s3    DMbMQGGIDAqD!Q r0   c                 ,    t         j                  |       S r'   )R_WORKERformatrr   s    r/   __repr__zWorker.__repr__   s    t$$r0   c                 "    | j                   rdS dS )NONLINEOFFLINEaliverr   s    r/   status_stringzWorker.status_string   s    ::x494r0   c                 ^    t        | j                  d   | j                  | j                        S )Nrx   )r   rd   rK   rL   rr   s    r/   r   zWorker.heartbeat_expires   s+     !4!%D,>,>@ 	@r0   c                 X    t        | j                  xr  |       | j                  k        S r'   )boolrd   r   )r+   nowfuns     r/   r   zWorker.alive   s#    DOOI43I3I(IJJr0   c                 $    dj                  |       S )Nz{0.hostname}.{0.pid})r   rr   s    r/   idz	Worker.id   s    %,,T22r0   )NNrI   Nr   NNNNNN)r3   r4   r5   r6   r   HEARTBEAT_EXPIRE_WINDOWrL   _fieldsPYPY	__slots__r*   rs   rp   r   r   propertyr   r   r	   r   r   r:   r0   r/   r   r      s    M+M#G BB	57BFBF2 :B 
% 5 5 @ @  K K 3 3r0   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jH                  diZ%dZ&ddZ'dddejP                  e)e*jV                  ejX                  fd	Z-dd
Z.d Z/d Z0d Z1d Z2d Z3d Z4e5d        Z6e5d        Z7e5d        Z8e9d        Z:e9d        Z;y)r   zTask State.Nr   )r   namestater   r   r   r#   r!   r   r    r"   r,   r-   etaexpiresretriesworkerresult	exceptionrG   runtime	tracebackexchangerouting_keyre   clientrootroot_idparent	parent_idchildren)rm   rn   )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|xs dD               _        nt                _         j                   j
                   j                  d _        |r j                  j                  |       y y )Nc              3      K   | ]A  }|j                   j                  v r'j                   j                  j                  |       C y wr'   )cluster_statetasksget).0task_idr+   s     r/   	<genexpr>z Task.__init__.<locals>.<genexpr>"  sD      $d00666 ""((,,W5$s   AA
r:   )r   r   r   )
r   r   r   r   _serializable_children_serializable_root_serializable_parent_serializer_handlersrm   r   )r+   r   r   r   r-   s   `    r/   r*   zTask.__init__  s    	*)# $'~2$ DM $IDM33++//%
!
 MM  ( r0   c	                    |xs i } ||      }	|	 || ||       n|j                         }	|	|k7  rp| j                  |k7  ra ||	       || j                        kD  rF| j                  j                  |	      }
|
<|j	                         D ci c]  \  }}||
v s|| }}}n|j                  |	|       | j                  j                  |       y c c}}w )N)r   rG   )upperr   merge_rulesr   ry   r   rm   )r+   rz   rG   rF   rQ   
precedencer   task_event_to_stateRETRYr   keepr   r   s                r/   rl   z
Task.event1  s     2 $E*D%+KKME E>djjE15!Jtzz$::##''.D%+\\^!QqDyAqD  MMM; 	V$s   CCc                 b     sg n j                   n fd}t         |             S )z;Information about this task suitable for on-screen display.c               3   r   K   t              t              z   D ]  } t        | d       }|| |f  y wr'   )listrV   )keyvalueextrarQ   r+   s     r/   _keyszTask.info.<locals>._keysS  s<     F|d5k1c40$u*$ 2s   *7	7)_info_fieldsr   )r+   rQ   r   r   s   ``` r/   infoz	Task.infoN  s0    U&,n""&	% EG}r0   c                 ,    t         j                  |       S r'   )R_TASKr   rr   s    r/   r   zTask.__repr__[  s    }}T""r0   c           
          t         j                  }| j                  j                  }| j                  D ci c]  }|  ||t
               || |             c}S c c}w r'   )r   __getattribute__r   r   r   r   )r+   r   handlerr   s       r/   as_dictzTask.as_dict^  sY    %%++//8<
34A wq% T1..
 	
 
s   "Ac                 T    | j                   D cg c]  }|j                   c}S c c}w r'   )r   r   )r+   r   tasks      r/   r   zTask._serializable_childrene  s    $(MM2D222s   %c                     | j                   S r'   )r   r+   r   s     r/   r   zTask._serializable_rooth  s    ||r0   c                     | j                   S r'   )r   r   s     r/   r   zTask._serializable_parentk  s    ~~r0   c                 F    t         | j                  | j                         ffS r'   )rR   r.   r   rr   s    r/   rs   zTask.__reduce__n  s    ???r0   c                     | j                   S r'   )r   rr   s    r/   r   zTask.idq  s    yyr0   c                 ^    | j                   | j                  S | j                   j                  S r'   )r   r   r   rr   s    r/   originzTask.originu  s"    "kk1t{{Et{{~~Er0   c                 :    | j                   t        j                  v S r'   )r   r   READY_STATESrr   s    r/   readyz
Task.readyy  s    zzV0000r0   c                     	 | j                   xr- | j                  j                  j                  | j                      S # t        $ r Y y w xY wr'   )r   r   r   dataKeyErrorrr   s    r/   r   zTask.parent}  sC    	>>Sd&8&8&>&>&C&CDNN&SS 		   := 	A	A	c                     	 | j                   xr- | j                  j                  j                  | j                      S # t        $ r Y y w xY wr'   )r   r   r   r   r   rr   s    r/   r   z	Task.root  sC    	<<OD$6$6$<$<$A$A$,,$OO 		r   )NNN)NN)<r3   r4   r5   r6   r   r   r   r   r!   r   r    r"   r#   r,   r-   r   r   r   r   r   r   rG   r   r   r   r   r   r   r   r   PENDINGr   re   r   r   r   RECEIVEDr   r   r*   r   r   TASK_EVENT_TO_STATEr   r   rl   r   r   r   r   r   r   rs   r   r   r   r   r   r   r   r:   r0   r/   r   r      s   
 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NNEEG /	 	 
KL)& &*$t**G"5"9"9%:#
3@   F F 1 1    r0   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	efd
Zd dZd d	efdZd Zd Zd Zd Zd Zd Zd ZefdZd!dee   fdZd"defdZeZd"dZ d"dZ!d Z"d Z#d Z$d Z%y)#r   zRecords clusters state.r   rb   Nc                 t   || _         |t        |      n|| _        |t        |      n|| _        |g n|| _        || _        || _        || _        || _        t        j                         | _        i | _        t               | _        i | _        | j!                          t#        | j$                  t&              | _        | j(                  j+                  t-        |	| j                               t#        | j.                  t&              | _        | j0                  j+                  t-        |
| j                               y 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__  s   
 '"? !!6707 	  23,1 	
'/X%:"#6 (*nn&5!#0*!!-mTZZH	J  3!!7 ,##-otzzJ	Lr0   c                 "    | j                         S r'   )_create_dispatcherrr   s    r/   _eventzState._event  s    &&((r0   c                     |j                  dd      }| j                  5  	  ||i ||r| j                          cd d d        S # |r| j                          w w xY w# 1 sw Y   y xY w)Nclear_afterF)r   r   _clear)r+   r(   r,   r-   r  s        r/   freeze_whilezState.freeze_while  sf    jj6[[ 	""D+F+KKM	" 	" KKM 		" 	"s!   AAAAAA%c                 h    | j                   5  | j                  |      cd d d        S # 1 sw Y   y xY wr'   )r   _clear_tasksr+   r   s     r/   clear_taskszState.clear_tasks  s,    [[ 	,$$U+	, 	, 	,   (1r   c                 P   |ru| j                         D ci c]$  \  }}|j                  t        j                  vr||& }}}| j                  j                          | j                  j                  |       n| j                  j                          g | j                  d d  y c c}}w r'   )	itertasksr   r   r   r   clearr   r   )r+   r   r   r   in_progresss        r/   r  zState._clear_tasks  s    -1^^-=)tT::V%8%88 d
K  JJJJk*JJqs   )B"c                 v    | j                   j                          | j                  |       d| _        d| _        y r9   )r   r  r  event_count
task_countr  s     r/   r  zState._clear  s/    % r0   c                 h    | j                   5  | j                  |      cd d d        S # 1 sw Y   y xY wr'   )r   r  r  s     r/   r  zState.clear  *    [[ 	&;;u%	& 	& 	&r  c                     	 | j                   |   }|r|j                  |       |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+   rD   r-   r   s       r/   get_or_create_workerzState.get_or_create_worker  sr    	 \\(+Ff%5=  	 .9dkk/$"/$ $FT\\(+4<	 s   %( /AAc                     	 | j                   |   dfS # t        $ r) | j                  ||       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  sT    	::d#U** 	&*iiDi&IID4::d#:	s    /AAc                 h    | j                   5  | j                  |      cd d d        S # 1 sw Y   y xY wr'   )r   r  )r+   rl   s     r/   rl   zState.event  r   r  c           	      b    | j                  t        |dj                  d|g                  d   S )Deprecated, use :meth:`event`.-r   typer   r  r   joinr+   rz   rQ   s      r/   
task_eventzState.task_event  s*    {{4SXXvuo-FGHKKr0   c           	      b    | j                  t        |dj                  d|g                  d   S )r(  r)  r   r*  r   r,  r.  s      r/   worker_eventzState.worker_event  s+    {{4SXXx6G-HIJ1MMr0   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 )NrD   rG   rF   r   re   Tc                    %xj                   dz  c_         r	 %|        | d   j                  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|j                  ||
||        #r|s|dk(  r #|       $r|r $|       ,j                  |	d        ||f|fS # |$ r Y y w xY w|dk(  r (|       \  }}	}
}}|d	k(  }	  |      d}}n# |$ r  |%
      x}'|<   d}Y nw xY w|r|	|_        n@	  !|	      }n# |$ r  |	      x},|	<   Y nw xY w||_        ||r|j                  d ||
       |r|	nj                  }t        &      }|dz   "kD  r *d        |||
|t        |            }|r|&d   kD  r	 )|       n	 |&|       |dk(  r%xj                  dz  c_	        |j                  ||
||        |j                  }|8 |       |r. |      j                  |         |	      j                  |       |j                  rR	 %j                  |j                     }|j                  j                  |       n# |$ r %j                  |       Y nw xY w	 %j                   j                  |      }|j                  j#                  |       n# |$ r Y nw xY w||f|fS y )Nrw   r+  r)  r   rv   Fonliner   r   r$  Tr   rx   r   )r  	partitionrl   r   r   r   r   r   r   r  r   addr   r   r   _add_pending_task_childr  r   )-rl   r   r   r~   createdgroupr<   subjectr   rD   rG   rF   
is_offliner   r   re   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, w.77  
  6:A%.7Hi ")I!5JJ*4X*># J%.4X.>GF9?9IIFWX%6	J
 LL)^UK#Gx4G$V,$%f-Hd3"G,g55#   $ &*1%.(x")V"3()1$,D ()-d$)GGD5;#'L( #"*DKF!+H!5# F5;H5EE!2F"(DK)nT>9E%4&)) H19111I $E9fc$iHWx|3g&8W-j(OOq(O

7I~uE II	(Y'#,Y7;;DA.x8<<TB>>7&*jj&@ $,,006 $ ;44T:;4 $ 6 6 : :4 @I MM((3   
 l+W44u !s}   A AAC* 1
A< <BB*C21C2
D D32D3E
 
EEJ J*)J*.K% %K-,K-)r   __getitem__r   r   r   r   r   r   heap_multiplierr  r6  r   r   r   r   r   r   r   r  r	  r   r   r   r~   )r+   r  r   r   rC  r   rD  rE  rF  rG  rH  rI  r   r   r  r   rJ  rK  rL  rM  r   s   ` @@@@@@@@@@@@@@@@@@@r/   r  zState._create_dispatcher  s<    mm//,,Z6FGVZ-w8>>OO	
 "558L8LL##''&*&7&79K9K#mjj$))t,,&||779O9O
H#11==!%!5!5!A!A ' --]	5 ]	5 ]	5 ]	5| r0   c                     	 | j                   |j                     }|j	                  |       y # t        $ r& t               x}| j                   |j                  <   Y @w xY wr'   )r  r   r   r   r6  )r+   r   chs      r/   r7  zState._add_pending_task_child|  sW    	D''7B 	t  	D:A)CB''7	Ds   - ,AAc                     | j                   j                         D cg c]4  } ||j                  |j                  |j                  t        |            6 c}x}| j                  d d  |j                          y c c}w r'   )r   valuesre   rG   r   r   r   sort)r+   r   theaps       r/   r  zState.rebuild_taskheap  sd     ZZ&&($
 aggq{{AHHc!f=$
 	
t~~a  				$
s   9A9limitc              #      K   t        | j                  j                               D ]  \  }}| |s|dz   |k\  s y  y w)Nrw   )	enumerater   ry   )r+   rW  indexrows       r/   r  zState.itertasks  s<     #DJJ$4$4$67JE3Ie+ 8s   0A A A reversec              #      K   | j                   }|rt        |      }t               }t        |d|      D ]7  } |d          }||j                  }||vs!||f |j                  |       9 yw)zkGenerator yielding tasks ordered by time.

        Yields:
            Tuples of ``(uuid, Task)``.
        r      N)r   reversedr  r   r   r6  )r+   rW  r\  _heapseenevtupr   r   s           r/   tasks_by_timezState.tasks_by_time  sp      UOEuE1e,E58:Dyyt#*$HHTN -s   A A.A.A.c                 P    t        fd| j                  |      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   J   K   | ]  \  }}|j                   k(  r||f  y wr'   )r   )r   r   r   r   s      r/   r   z'State._tasks_by_type.<locals>.<genexpr>  s,      #jdD		T! D\ #s    #r\  r   r   rc  )r+   r   rW  r\  s    `  r/   r  zState._tasks_by_type  s1     #D,>,>w,>,O #u
 	
r0   c                 P    t        fd| j                  |      D        d|      S )znGet all tasks by worker.

        Slower than accessing :attr:`tasks_by_worker`, but ordered by time.
        c              3   ^   K   | ]$  \  }}|j                   j                  k(  r||f & y wr'   )r   rD   )r   r   r   rD   s      r/   r   z)State._tasks_by_worker.<locals>.<genexpr>  s2      2jdD$$0 D\ 2s   *-rf  r   rg  )r+   rD   rW  r\  s    `  r/   r  zState._tasks_by_worker  s1    
 2D,>,>w,>,O 2u
 	
r0   c                 ,    t        | j                        S )z%Return a list of all seen task types.)sortedr  rr   s    r/   
task_typeszState.task_types  s    d&&''r0   c                 D    d | j                   j                         D        S )z+Return a list of (seemingly) alive workers.c              3   :   K   | ]  }|j                   s|  y wr'   r   )r   ws     r/   r   z&State.alive_workers.<locals>.<genexpr>  s     <aAGG<s   )r   rS  rr   s    r/   alive_workerszState.alive_workers  s    <4<<..0<<r0   c                 ,    t         j                  |       S r'   )R_STATEr   rr   s    r/   r   zState.__repr__  s    ~~d##r0   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	  rr   s    r/   rs   zState.__reduce__  sm    ~~tzz4&&(@(@t11+D,>,>?+D,@,@A 
 
 	
r0   )
NNNNi  i'  NNNN)Tr'   )NT)&r3   r4   r5   r6   r   r   r  r  rO  r*   r   r  r  r  r   r  r  r  r"  r%  rl   r/  r1  r  r7  r   r  r   r}   r  rc  tasks_by_timestampr  r  rl  rp  r   rs   r:   r0   r/   r   r     s    !FDKJO $48AF2659	L> ) )",
$ 
&4 &  &LNyv *3 x} # #$ '
	
(=$
r0   r   c           
          | j                         D ci c]   \  }}||D cg c]  }|j                   c}" c}}}S c c}w c c}}}w r'   )ry   r   )mappingr   r   rU  s       r/   rt  rt    s:    ;B==?KKKD%D'A144''KK'Ks   A?AAc           	          | xs i } | j                         D ci c]  \  }}|t        fd|D               c}}S c c}}w )Nc              3   2   K   | ]  }|v s|     y wr'   r:   )r   ir   s     r/   r   z4_deserialize_Task_WeakSet_Mapping.<locals>.<genexpr>  s     >q1:%(>s   	
)ry   r   )rw  r   r   idss    `  r/   r  r    sF    mG$]]_.c '>C>>> . . .s   >)Er6   r   sysr   collectionsr   collections.abcr   r   decimalr   	itertoolsr   operatorr   r	   typingr
   r   weakrefr   r   kombu.clocksr   kombu.utils.objectsr   celeryr   celery.utils.functionalr   r   r   celery.utils.logr   __all__hasattrr   r   r   rB   r3   loggerwarningrA   rr  r   r   r   r   STARTEDFAILUREr   SUCCESSREVOKEDREJECTEDr   r%   registerrH   rM   rN   r   rR   r`   r   r   r   rt  r  r:   r0   r/   <module>r     s    
  # $      $   " /  < < '
: s'(
    ' 
 
H	~~
@F	? NN~~nn||~~	 )+ )0   % & 	/0, 1, ')$;%Uz	6$ :Z3 Z3 Z3z 6X X XvB
 B
J
L.r0   