
    >iM                        d Z ddlZddlZddl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 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ZdZ ee       Z! edg d      Z"d Z#d Z$ G d de      Z%d Z&d Z' e'       d        Z( e'dddefg      drd       Z)d  Z* e'd!d"#      d$        Z+ejX                  jZ                  fd%Z.ej^                  j`                  ejb                  j`                  fd&Z2 e&d'd"#      dsd(       Z3 e&d)d*#      dsd+       Z4dsd,Z5 e&d'd-e6fgd./      d0        Z7 e&d1e6fd2e6fgd34      d5        Z8 e&d1e6fd6e9fd7e9fgd84      dtd9       Z: e'       d:        Z; e&       dud;       Z< e&       d<        Z= e&       d=        Z> e&       d>        Z? e'd?      dud@       Z@ e'dAB      dC        ZA e'       dD        ZB e'dEF      dG        ZCdH ZD e'dIF      dJ        ZE e'dKF      drdL       ZF e'dMF      dN        ZG e'dOdPdQR      dvdS       ZH e'dTdUe6fdVeIfdWeIfgdXY      dwdZ       ZJ e'       d[        ZK e'd\eIfgd]4      dxd^       ZL e&d_eIfgd`4      dyda       ZM e&d_eIfgd`4      dydb       ZN e&       dzdc       ZO e&ddeIfdeeIfgdf4      d{dg       ZP e&       d|dh       ZQ e&die6fdje6fdke6fdle6fgdm4      	 	 dtdn       ZR e&die6fgdo4      dp        ZS e'       dq        ZTy)}z.Worker remote control command implementations.    N)UserDictdefaultdict
namedtuple)TERM_SIGNAME)	safe_repr)WorkerShutdown)signals)
maybe_list)
get_logger)jsonify	strtobool)rate   state)Request)Panel)exchangerouting_key
rate_limitcontroller_info_t)aliastypevisibledefault_timeouthelp	signatureargsvariadicc                 
    d| iS )Nok values    q/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/celery/worker/control.pyr!   r!      s    %=    c                 
    d| iS )Nerrorr"   r#   s    r%   nokr)   "   s    Ur&   c                   @    e Zd ZdZi Zi Zed        Ze	 	 	 dd       Zy)r   z+Global registry of remote control commands.c                 T    |r  | j                   di || S  | j                   di |S )Nr"   )	_register)clsr   kwargss      r%   registerzPanel.register,   s4    *=3==*6*D11s}}&v&&r&   Nc
           
      6    	  	f
d}
|
S )Nc           
        
 xs | j                   }xs0 | j                  xs dj                         j                  d      d   }| j                  |<   t        
|	      j                  |<   r| j                  <   | S )N 
r   )__name____doc__stripsplitdatar   meta)funcontrol_name_helpr   r   r-   r   r   namer   r   r   r   s      r%   _innerzPanel._register.<locals>._inner7   s    /3<<LFS[[.B557==dCAFE%(CHH\"%6tWoy$&2CHH\" "%Jr&   r"   )r-   r=   r   r   r   r   r   r   r   r   r>   s   `````````` r%   r,   zPanel._register2   s    
		 		 r&   )	NNcontrolTg      ?NNNN)	r4   
__module____qualname__r5   r8   r9   classmethodr/   r,   r"   r&   r%   r   r   &   s>    5DD' '
 3<:>6: r&   r   c                  0    t        j                  dddi| S )Nr   r?   r"   r   r/   r.   s    r%   control_commandrF   D       >>3y3F33r&   c                  0    t        j                  dddi| S )Nr   inspectr"   rD   rE   s    r%   inspect_commandrJ   H   rG   r&   c                 H    t        | j                  j                               S )z6Information about Celery installation for bug reports.)r!   app	bugreportr   s    r%   reportrN   N   s     eii!!#$$r&   	dump_confz[include_defaults=False]with_defaults)r   r   r   Fc                 v    t        | j                  j                  j                  |      t        t
              S )zList configuration.)rP   )	keyfilterunknown_type_filter)r   rL   conftable_wanted_config_keyr   )r   rP   r.   s      r%   rT   rT   T   s/     599>>''m'D/'02 2r&   c                 J    t        | t              xr | j                  d       S )N__)
isinstancestr
startswith)keys    r%   rV   rV   `   s     c3<t(<$<<r&   idsz[id1 [id2 [... [idN]]]])r   r   c                     t        t        |            D ci c](  }|j                  t        |      |j	                         f* c}S c c}w )z!Query for task information by id.)_find_requests_by_idr
   id_state_of_taskinfo)r   r]   r.   reqs       r%   
query_taskrd   f   sF     (
38 	$chhj11  s   -Ac              #   N   K   | D ]  }	  ||        y # t         $ r Y w xY wwN)KeyError)r]   get_requesttask_ids      r%   r_   r_   r   s8      	g&&  		s   %
%	"%"%c                 (     ||       ry ||       ryy)Nactivereservedreadyr"   )request	is_activeis_reserveds      r%   ra   ra   {   s     	W	r&   ri   c                     t        t        |      xs g       d}}t        | |||fi |}t        |t              rd|v r|S t        d| d      S )zRevoke task by task id (or list of ids).

    Keyword Arguments:
        terminate (bool): Also terminate the process if the task is active.
        signal (str): Name of signal to use for terminate (e.g., ``KILL``).
    Nr!   ztasks z flagged as revoked)setr
   _revokerY   dictr!   )r   ri   	terminatesignalr.   task_idss         r%   revokerx      s\     Jw/526gHuh	6DVDH(D!dh&6xj 3455r&   headersz/[key1=value1 [key2=value2 [... [keyN=valueN]]]]c                    t        j                  |xs t              }t        |t              r4|D ci c])  }|j                  d      d   |j                  d      d   + }}|j                         D ]Y  \  }}t        t        j                  j                  |      xs g       t	        t        |            z   }	|	t        j                  |<   [ |st        d| d      S t	        t        j                        }
t        t              }|
D ]  }t        |d      s|j                   s|j                         D ]  \  }}||j                   v st        |      }t        |j                   |         }t        |      t        |      z  }|sR||   j#                  |       |j%                  | j&                  j(                  |         |st        d| d      S t        d| d	      S c c}w )
a  Revoke task by header (or list of headers).

    Keyword Arguments:
        headers(dictionary): Dictionary that contains stamping scheme name as keys and stamps as values.
                             If headers is a list, it will be converted to a dictionary.
        terminate (bool): Also terminate the process if the task is active.
        signal (str): Name of signal to use for terminate (e.g., ``KILL``).
    Sample headers input:
        {'mtask_id': [id1, id2, id3]}
    =r   r   zheaders z' flagged as revoked, but not terminatedstampsrv   z were not terminatedz revoked)_signalssignumr   rY   listr7   itemsr
   worker_staterevoked_stampsgetr!   active_requestsr   rr   hasattrr|   updateru   consumerpool)r   ry   ru   rv   r.   r   hheaderr|   updated_stampsr   #terminated_scheme_to_stamps_mappingrc   expected_header_keyexpected_header_valueactual_headermatching_stamps_for_requests                    r%   revoke_by_stamped_headersr      s   & __V3|4F'4 =DE1773<?AGGCLO3EE!--/ =#L$?$?$C$CF$K$QrRUYZdekZlUmm.<##F+= HWI%LMNN<778O*5c*:'  J3!cjj>Emmo J:#%:&#**4,67L,M)$.szz:M/N$OM25m2DsK`Ga2a/2;<OPWWXstenn&9&9&IJ	J /HWI%9:;;<=XFGGC Fs   .G'c                    t        |      }t               }t        j                  j	                  |       |rt        j                  |xs t              }t        |      D ]  }|j                  |vs|j                  |j                         t        j                  d|j                  |       |j                  | j                  j                  |       t        |      |k\  s n |st!        d      S t!        dj#                  dj%                  |                  S dj%                  |      }	t        j                  d|	       |S )NzTerminating %s (%s)r}   zterminate: tasks unknownzterminate: {}z, zTasks flagged as revoked: %s)lenrr   r   revokedr   r~   r   r   r_   r`   addloggerrb   ru   r   r   r!   formatjoin)
r   rw   ru   rv   r.   size
terminatedr   rn   idstrs
             r%   rs   rs      s    x=DJ)!7<8+H5 	Gzz+wzz*17::vF!!%.."5"5f!Ez?d*	 011/((:)>?@@IIhE
KK.6Or&   rv   z <signal> [id1 [id2 [... [idN]]]])r   r   r   c                      t        | |d|      S )z+Terminate task by task id (or list of ids).T)ru   rv   )rx   )r   rv   ri   r.   s       r%   ru   ru      s     %D@@r&   	task_namer   z0<task_name> <rate_limit (e.g., 5/s | 5/m | 5/h)>)r   r   c                    	 t        |       	 || j                  j                  |   _        | j                  j                          |s!t        j                  d|       t        d      S t        j                  d	||       t        d
      S # t        $ r}t        d|      cY d}~S d}~ww xY w# t        $ r& t        j                  d|d       t        d      cY S w xY w)zTell worker(s) to modify the rate limit for a task by type.

    See Also:
        :attr:`celery.app.task.Task.rate_limit`.

    Arguments:
        task_name (str): Type of task to set rate limit for.
        rate_limit (int, str): New rate limit.
    zInvalid rate limit string: Nz&Rate limit attempt for unknown task %sTexc_infounknown taskz)Rate limits disabled for tasks of type %sz rate limit disabled successfullyz(New rate limit for tasks of type %s: %s.znew rate limit set successfully)r   
ValueErrorr)   rL   tasksr   rg   r   r(   r   reset_rate_limitsrb   r!   )r   r   r   r.   excs        r%   r   r      s    ":Z#0:			"- 
NN$$&?K455
KK::'/00%  :0899:
  #= 	 	/>""#s.   B B/ 	B,B'!B,'B,/,CCsofthardz#<task_name> <soft_secs> [hard_secs]c                     	 | j                   j                  |   }||_        ||_        t        j                  d|||       t        d      S # t        $ r& t        j	                  d|d       t        d      cY S w xY w)zTell worker(s) to modify the time limit for task by type.

    Arguments:
        task_name (str): Name of task to change.
        hard (float): Hard time limit.
        soft (float): Soft time limit.
    z-Change time limit attempt for unknown task %sTr   r   z5New time limits for tasks of type %s: soft=%s hard=%sztime limits set successfully)
rL   r   rg   r   r(   r)   soft_time_limit
time_limitrb   r!   )r   r   r   r   r.   tasks         r%   r   r     s    #yyy)  DDO
KKG4',--  #D 	 	/>""#s   A ,A;:A;c                 F    d| j                   j                  j                  iS )z Get current logical clock value.clock)rL   r   r$   r   r.   s     r%   r   r   =  s     UYY__**++r&   c                     | j                   j                  r(| j                   j                  j                  |||       yy)zHold election.

    Arguments:
        id (str): Unique election id.
        topic (str): Election topic.
        action (str): Action to take for elected actor.
    N)r   gossipelection)r   r`   topicactionr.   s        r%   r   r   C  s2     ~~&&r5&9 r&   c                     | j                   j                  }|j                  rId|j                  vr;|j                  j                  d       t        j                  d       t        d      S t        d      S )z+Tell worker(s) to send task-related events.r   z)Events of group {task} enabled by remote.ztask events enabledztask events already enabled)r   event_dispatchergroupsr   r   rb   r!   r   
dispatchers     r%   enable_eventsr   P  sb     00JV:+<+<<f%?@'((+,,r&   c                     | j                   j                  }d|j                  v r;|j                  j                  d       t        j                  d       t        d      S t        d      S )z3Tell worker(s) to stop sending task-related events.r   z*Events of group {task} disabled by remote.ztask events disabledztask events already disabled)r   r   r   discardr   rb   r!   r   s     r%   disable_eventsr   [  sZ     00J"""!!&)@A()),--r&   c                     t         j                  d       | j                  j                  } |j                  dddit
        j                   y)z3Tell worker(s) to send event heartbeat immediately.zHeartbeat requested by remote.freq   N)zworker-heartbeat)r   debugr   r   sendr   SOFTWARE_INFOr   s     r%   	heartbeatr   f  s<     LL1200JJOOMQM,2L2LMr&   )r   c                 J   || j                   k7  rt        j                  d|       |rt        j                  j                  |       t        j                  j                          t        j                  j                  | j                  j                  j                         dS y)zRequest mingle sync-data.zsync with %s)r   r   N)hostnamer   rb   r   r   r   purge_datarL   r   forward)r   	from_noder   r.   s       r%   hellor   p  sy     ENN"NI.  ''0""$#++11YY__,,.
 	
 #r&   g?)r   c                     t        d      S )zPing worker(s).pong)r!   r   s     r%   pingr     s     f:r&   c                 J    | j                   j                  j                         S )z&Request worker statistics/information.)r   
controllerstatsr   s     r%   r   r     s     >>$$**,,r&   dump_schedule)r   c                 R    t        t        | j                  j                              S )z0List of currently scheduled ETA/countdown tasks.)r   _iter_schedule_requestsr   timerr   s     r%   	scheduledr     s     '(<(<=>>r&   c              #   N  K   | j                   j                  D ]s  }	 |j                  j                  d   }t	        |t
              s.|j                  r|j                  j                         nd |j                  |j                         d u y # t        t        f$ r Y w xY ww)Nr   )etapriorityrn   )schedulequeueentryr   rY   r   r   	isoformatr   rb   
IndexError	TypeError)r   waitingarg0s      r%   r   r     s     >>'' 
	==%%a(D $(3788488--/ ' 0 0#yy{  I& 		s.   B%BB%A	B%B"B%!B""B%dump_reservedc                     | j                  t        j                        | j                  t        j                        z
  }|sg S |D cg c]  }|j	                          c}S c c}w )zAList of currently reserved tasks, not including scheduled/active.)tsetr   reserved_requestsr   rb   )r   r.   reserved_tasksrn   s       r%   rl   rl     sV     	

<112

<//0	1  	*89wGLLN999s   A"dump_activec                     | j                  t        j                        D cg c]  }|j                  |       c}S c c}w )z'List of tasks currently being executed.)safe)r   r   r   rb   )r   r   r.   rn   s       r%   rk   rk     sB     !::l&B&BCE LLdL# E E Es   >dump_revokedc                 4    t        t        j                        S )zList of revoked task-ids.)r   r   r   r   s     r%   r   r     s     $$%%r&   
dump_taskstaskinfoitemsz[attr1 [attr2 [... [attrN]]]])r   r   r   c                     | j                   j                  }xs t        |r|nd |D        }fd}t        |      D cg c]  } |||          c}S c c}w )zList of registered tasks.

    Arguments:
        taskinfoitems (Sequence[str]): List of task attributes to include.
            Defaults to ``exchange,routing_key,rate_limit``.
        builtins (bool): Also include built-in tasks.
    c              3   D   K   | ]  }|j                  d       r|  yw)zcelery.N)r[   ).0r   s     r%   	<genexpr>zregistered.<locals>.<genexpr>  s"      "@DOOI$>"@s     c                 D   D ci c]&  }t        | |d       |t        t        | |d             ( }}|rW|j                         D cg c]  }dj                  |       }}dj	                  | j
                  dj                  |            S | j
                  S c c}w c c}w )Nr{   z{} [{}] )getattrrZ   r   r   r   r=   )r   fieldfieldsfrb   r   s        r%   _extract_infoz!registered.<locals>._extract_info  s    @M
7<tUD)5 3wtUD122
 
 )/8ACHHQK8D8##DIIsxx~>>yy

 9s   +BB)rL   r   DEFAULT_TASK_INFO_ITEMSsorted)r   r   builtinsr.   regr   r   r   s    `      r%   
registeredr     s[     ))//C!<%<MC "@"@E 28?M#d)$???s   Ag      N@r   num	max_depthz.[object_type=Request] [num=200 [max_depth=10]])r   r   r   c                 N   	 ddl }t        j                  d|       t	        j
                  ddd      5 }|j                  |      d| |j                  |fd	|j                  
       d|j                  icddd       S # t        $ r t        d      w xY w# 1 sw Y   yxY w)a  Create graph of uncollected objects (memory-leak debugging).

    Arguments:
        num (int): Max number of objects to graph.
        max_depth (int): Traverse at most n levels deep.
        type (str): Name of object to graph.  Default is ``"Request"``.
    r   NzRequires the objgraph libraryzDumping graph for type %rcobjgz.pngF)prefixsuffixdeletec                     | v S rf   r"   )vobjectss    r%   <lambda>zobjgraph.<locals>.<lambda>  s    Q'\ r&   )r   	highlightfilenamer
  )	objgraphImportErrorr   rb   tempfileNamedTemporaryFileby_typeshow_backrefsr=   )r   r   r   r   	_objgraphfhr  s         @r%   r  r    s    ;$ KK+T2		$	$G,25
B %EG##D)$3/+AWW 	  	

 BGG$% %  ;9::;% %s   B ABBB$c                     ddl m}  |       S )z Sample current RSS memory usage.r   )
sample_mem)celery.utils.debugr  )r   r.   r  s      r%   	memsampler    s     .<r&   samplesz[n_samples=10]c                 z    ddl m} t        j                         }|j	                  |       |j                         S )z/Dump statistics of previous memsample requests.r   )r   )file)celery.utilsr   ioStringIOmemdumpgetvalue)r   r  r.   r   outs        r%   r  r    s,     #
++-C	MMsM<<>r&   nz[N=1]c                     | j                   j                  j                  rt        d      S | j                   j                  j                  |       | j                   j                  |       t        d      S )z!Grow pool by n processes/threads.zJpool_grow is not supported with autoscale. Adjust autoscale range instead.zpool will grow)r   r   
autoscalerr)   r   grow_update_prefetch_countr!   r   r   r.   s      r%   	pool_growr&    sY     ~~  ++_``  #--a0r&   c                     | j                   j                  j                  rt        d      S | j                   j                  j                  |       | j                   j                  |        t        d      S )z#Shrink pool by n processes/threads.zLpool_shrink is not supported with autoscale. Adjust autoscale range instead.zpool will shrink)r   r   r"  r)   r   shrinkr$  r!   r%  s      r%   pool_shrinkr)    s[     ~~  ++abb""1%--qb1 !!r&   c                     | j                   j                  j                  r3| j                  j                  j                  |||       t        d      S t        d      )zRestart execution pool.)reloaderzreload startedzPool restarts not enabled)rL   rT   worker_pool_restartsr   r   reloadr!   r   )r   modulesr-  r+  r.   s        r%   pool_restartr/  ,  sL     yy~~**!!((&8(L"##455r&   maxminz[max [min]]c                     | j                   j                  j                  }|r&|j                  ||      \  }}t	        d| d|       S t        d      )zModify autoscale settings.zautoscale now max=z min=zAutoscale not enabled)r   r   r"  r   r!   r   )r   r0  r1  r"  max_min_s         r%   	autoscaler5  6  sW     **55J&&sC0
d&tfE$899
,
--r&   c                 B    t         j                  |       t        |      )zShutdown worker(s).)r   warningr   )r   msgr.   s      r%   shutdownr9  C  s     NN3

r&   r   r   exchange_typer   z'<queue> [exchange [type [routing_key]]]c                      | j                   j                  | j                   j                  |||xs d|fi | t        d|       S )z2Tell worker(s) to consume from task queue by name.directzadd consumer )r   	call_soonadd_task_queuer!   )r   r   r   r:  r   optionss         r%   add_consumerr@  L  sQ     ENN%%x2(KLCJL eW%&&r&   z<queue>c                 ~    | j                   j                  | j                   j                  |       t        d|       S )z9Tell worker(s) to stop consuming from task queue by name.zno longer consuming from )r   r=  cancel_task_queuer!   )r   r   _s      r%   cancel_consumerrD  ^  s:     
NN((% )%122r&   c                     | j                   j                  rG| j                   j                  j                  D cg c]  }t        |j	                  d             c}S g S c c}w )z:List the task queues a worker is currently consuming from.T)recurse)r   task_consumerqueuesrt   as_dict)r   r   s     r%   active_queuesrJ  j  sZ     ~~##"^^99@@B U]]4]01 B 	BIBs   "A )F)FN)NNNrf   )NF)   
   r   )rL  )r   )NFN)NN)zGot shutdown from remote)Ur5   r  r  collectionsr   r   r   billiard.commonr   kombu.utils.encodingr   celery.exceptionsr   celery.platformsr	   r~   celery.utils.functionalr
   celery.utils.logr   celery.utils.serializationr   r   celery.utils.timer   r2   r   r   rn   r   __all__r   r4   r   r   r!   r)   r   rF   rJ   rN   rT   rV   rd   requests__getitem__r_   r   __contains__r   ra   rx   r   rs   rZ   ru   r   floatr   r   r   r   r   r   r   r   r   r   r   rl   rk   r   r   intr  r  r  r&  r)  r/  r5  r9  r@  rD  rJ  r"   r&   r%   <module>r\     s   4 	  9 9 ( * , 0 . ' 9 " # 
C 	H	2 5  H <44 % %
 
(I
&	'
2
2= '	 &2%:%:%F%F *99FF+==JJ '6	6$ ?3H	3Hl0 S/	0
A
A
 
|S1	2@!1	!1H 
vuo	?3.	.4 , ,
 	: 	: - - . . N N 
  
" % &
 - -
 '? (?
 ': (: }%E &E ~&& '&
 
-
@
@: 3-%S'9	:>
%
%0   c
		 * 	  *"	" 6 6 #,	%.	.   	#	S	#		
 8 =A!'' C.	3	3  r&   