
    >i3                     L   d Z ddl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mZ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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dl(m)Z) dZ* e#e+      Z,ej                  j[                  d      Z. e/ed      Z0g dZ1dZ2dZ3d Z4d Z5 G d de)      Z6dddefdZ7e
dk(  r ee7d d!e"      Z8n ee7d d#      Z8e.s ee7dd!e"      Z9nd$ xZ8Z9d% Z:e.s ee7d&e:e'      Z;nd( Z;d) Z<d.d*Z=d/d+Z>	 	 d0d,Z?d.d-Z@y)1zWorker command-line program.

This module is the 'program-version' of :mod:`celery.worker`.

It does everything necessary to run that module
as an actual application, like installing signal handlers,
platform tweaks, and so on.
    N)datetime)partial)REMAP_SIGTERM)current_process)safe_str)VERSION_BANNER	platformssignals)trace)	AppLoader)
EX_FAILUREEX_OKcheck_privileges)staticterm)cry)qualname)
get_loggerin_sighandlerset_in_sighandler)	pluralize)WorkController)Workerjavapypy_version_info) ----------------- ***** ------- ******* ----- *** --- * ---- ** ----------r    r    r    r   r   r   r   z{hostname} v{version}

{platform} {timestamp}

[config]
.> app:         {app}
.> transport:   {conninfo}
.> results:     {results}
.> concurrency: {concurrency}
.> task events: {events}

[queues]
{queues}
z
[tasks]
{tasks}
c                  <    ddl m}  t        d  |        D              S )Nr   	enumeratec              3   V   K   | ]!  }|j                   j                  d       sd # yw)zDummy-   N)name
startswith).0ts     n/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/celery/apps/worker.py	<genexpr>z&active_thread_count.<locals>.<genexpr>L   s)      3Qff''1  3s   '))	threadingr#   sumr"   s    r*   active_thread_countr.   J   s     # 3)+ 3 3 3    c                 B    t        d|  t        j                  d       y )N
Tfileflush)printsys
__stderr__)msgs    r*   safe_sayr9   P   s    	Bse*3>>6r/   c                        e Zd ZdZddZ	 	 d fd	Zd Z fdZd Zd Z	ddZ
d	 Zdd
Zd ZddZd Zd Zd Z xZS )r   zWorker as a program.c                 :   || _         t        j                  | j                  | j                         t
        j                  j                  | j                  | | j                  j                  |       t        | j                  j                  j                         y )N)senderinstanceconfoptions)quietr   setup_worker_optimizationsapphostnamer
   celeryd_initsendr>   r   accept_content)selfr@   kwargss      r*   on_before_initzWorker.on_before_initW   sj    
((4==A 	!!==4 	" 	
 	556r/   c                    | j                   j                  d|      | _        | j                   j                  d|      | _        t	        |   di | || _        || _        t        j                  j                         | _        | j                   j                  j                  | j                  || n|      | _        y )Nworker_redirect_stdoutsworker_redirect_stdouts_level)enabled )rB   eitherredirect_stdoutsredirect_stdouts_levelsupersetup_defaultspurgeno_colorr6   stdoutisatty_isattylogcoloredlogfile)rG   rT   rU   rP   rQ   rH   	__class__s         r*   on_after_initzWorker.on_after_initc   s     !%%'7!9&*hhoo+-C'E#((
 zz((*xx||++LL$,$8Lh , 
r/   c                     | j                         | _        t        j                  | j                  | j
                         y N)setup_logging_custom_loggingr   rA   rB   rC   rG   s    r*   on_init_blueprintzWorker.on_init_blueprints   s-    #113 	((4==Ar/   c                    | j                   }t        | 	          t        j                  j                  | j                  | |j                         | j                  r| j                          | j                  s| j                          | j                  d       | j                  |        | j                  s1| j                  r%|j                   j                  | j"                         d}|j$                  }t'        |t(              r|j+                         dv}|r1|j                  j-                         rt.        j1                  d       y y y )N)r<   r=   r>   z-active-T)zdjango.conf:settingszPlease run `celery upgrade settings path/to/settings.py` to avoid these warnings and to allow a smoother upgrade to Celery 6.0.)rB   rR   on_startr
   celeryd_after_setuprE   rC   r>   rT   purge_messagesr@   emit_bannerset_process_statusinstall_platform_tweaksra   rP   rY   rQ   _config_source
isinstancestrlowermaybe_warn_deprecated_settingsloggerwarning)rG   rB   warn_deprecatedconfig_sourcer\   s       r*   re   zWorker.on_starty   s   hh 	##((==4chh 	) 	
 ::!zz
+$$T*##(=(=GG$$T%@%@A **mS) ,113 < O xx668% 9 r/   c                    t        j                         }|r0t        t        j                  t	        j
                                      t        t        dj                  t        | j                  j                  d| j                  |                   t        | j                  j                  | j                         xs d            g            t        j                  d       y )N z 
)artlinesTr2   )r   supports_imagesr5   imgcatr   logor   joinrm   rZ   cyanstartup_inforeset
extra_infor6   
__stdout__)rG   	use_images     r*   rh   zWorker.emit_banner   s     ((*	$++fkkm,-hrww!!t((i-(@B C""4??#4#:;< 
   ..		.r/   c                     t         j                  j                  |       t        j	                  dt        | j                               y )N)r<   z	%s ready.)r
   worker_readyrE   rp   infor   rC   )rG   consumers     r*   on_consumer_readyzWorker.on_consumer_ready   s0    !!!2K$--!89r/   c                     || j                   | j                    }| j                  j                  j                  | j                  | j
                  d|| j                        S )NF)rP   colorizerC   )rU   rB   rY   setuploglevelr[   rC   )rG   r   s     r*   r`   zWorker.setup_logging   sU     9==(Hxx||!!MM4<<"X " 
 	
r/   c           
          | j                   j                         5 }| j                   j                  j                  |      }|rt	        d| dt        |d       dd       d d d        y # 1 sw Y   y xY w)N)
connectionzpurge: Erased  messagez from the queue.
T)r4   )rB   connection_for_writecontrolrT   r5   r   )rG   r   counts      r*   rg   zWorker.purge_messages   sp    XX**, 	l
HH$$**j*AEugQy	/J.KK]^fjk	l 	l 	ls   AA++A4c                 v    |j                  fdt        | j                  j                        D              S )Nc              3   T   K   | ]  }s|j                        s
n|rd |  ! yw)z  . N)r'   )r(   taskinclude_builtinsint_s     r*   r+   z"Worker.tasklist.<locals>.<genexpr>   s/      
"1ADOOD)t 4&M
s   %()rz   sortedrB   tasks)rG   r   sepr   s    ` `r*   tasklistzWorker.tasklist   s.    xx 
&,TXX^^&<
 
 	
r/   c                     | j                   y | j                   t        j                  k  rE| j                   t        j                  k  }| j	                  |      }t
        j                  |      S y )N)r   )r   )r   loggingINFODEBUGr   EXTRA_INFO_FMTformat)rG   r   r   s      r*   r~   zWorker.extra_info   s\    == ==GLL(#}}=}}6F}GH!((x(88 )r/   c                    | j                   }t        | j                        }dj                  |j                  xs dt        |            }t        |j                  t              s4t        |j                        }|j                  d      r|dd  }|d| dz  }| j                  r| j                  \  }}d| d| d	}| j                  }t        |t              s|j                  }|d|j                  d
      d    dz  }d}	| j                  sd}	t         j                  |t#        | j$                        t'        j(                         j+                  d      t,        | j                   j/                         j1                         | j                   j2                  j1                         |t#        t5        j6                               |	|j8                  j:                  j                  dd      
      j=                         }
|r4t?        |
      D ]&  \  }}	 djA                  tB        |   |
|   g      |
|<   ( djA                  |
      dz   S # tD        $ r d|
|   z   |
|<   Y Sw xY w)Nz{}:{:#x}__main__zcelery.loaders    ()z{min=z, max=}.ONz/OFF (enable -E to monitor tasks in this worker)r   )microsecondF)indentindent_first)
rB   rC   	timestampversionconninforesultsconcurrencyplatformeventsqueuesr   z                r1   )#rB   rm   r   r   mainidrl   loaderr   r   r'   	autoscalepool_cls
__module__splittask_eventsBANNERr   rC   r   nowreplacer   r   as_uribackend	_platformr   amqpr   
splitlinesr#   rz   ARTLINES
IndexError)rG   rv   rB   r   apprr   maxminpoolr   banneri_s                r*   r|   zWorker.startup_info   s   hh$**+  !7ZCA#**i0cjj)F  !12bN"D>>~~HC"3%vcU"5K}}$$??DDJJsOB/022FFdmm,lln,,,;"XX((*113HH$$++-#i002388??)))G  
 *, 	 !&) 515 #(1+vay)A BF1I5
 yy 4'' " 5 (6!9 4F1I5s    IIIc                 ,   | j                   j                  r| j                          | j                  s-| j                   j                  rt	        |       nt        |       t        |       t        |       t        |       t                t                y)z1Install platform specific tweaks and workarounds.N)rB   IS_macOS macOS_proxy_detection_workaroundrX   !install_HUP_not_supported_handlerinstall_worker_restart_handlerinstall_worker_term_handler install_worker_term_hard_handlerinstall_worker_int_handlerinstall_cry_handlerinstall_rdb_handler)rG   workers     r*   rj   zWorker.install_platform_tweaks   si    88113 || xx   2&9.v6#F+(0"6*r/   c                 D    t         j                  j                  dd       y)z6See https://github.com/celery/celery/issues#issue/161.celery_dummy_proxyset_by_celerydN)osenviron
setdefaultrb   s    r*   r   z'Worker.macOS_proxy_detection_workaround  s    


24DEr/   c                     t        j                  d| dt        j                  t        j                         d| j
                        S )Ncelerydr   r   )r   rC   )r	   set_mp_process_titlestrargvr6   argvrC   )rG   r   s     r*   ri   zWorker.set_process_status  s?    --6I--chh78:]]
 	
r/   )F)FNNNr_   )Tr1   zcelery.)T)__name__r   __qualname____doc__rI   r]   rc   re   rh   r   r`   rg   r   r~   r|   rj   r   ri   __classcell__)r\   s   @r*   r   r   T   sY    
7 37DH
 B&P
.:
l
9((T,F
r/   r   TERMWarmc                 l      fd}t        d       |_        |t        j                  <   y )Nc                  0   t               5  ddlm} t               j                  dk(  rFr        t        d d       t        j                  j                  j                         t        |ddd	          d d d        y # 1 sw Y   y xY w)
Nr   stateMainProcesszworker: z shutdown (MainProcess))r<   sighowexitcodeshould_stopshould_terminate)r   Cold)r   celery.workerr   r   _namer9   r
   worker_shutting_downrE   rC   setattr)argsr   callbackr   r   r   r   s     r*   _handle_requestz*_shutdown_handler.<locals>._handle_request  s    _ 	H+ &&-7V$8C5(?@A,,11!??% 2  EM$688;=>FH	H 	H 	Hs   A7BBworker_)rm   r   r	   r
   )r   r   r   r   r   r   s   ````` r*   _shutdown_handlerr     s4    H H  #WSE?3O,Icr/   SIGQUITSIGTERMr   )r   r   r   )r   r   c                       y r_   rN   )akws     r*   <lambda>r  <  s    r/   c                 4    t        d       t        | d       y )Nz>worker: Hitting Ctrl+C again will terminate all running tasks!SIGINTr   )r9   r   )r   s    r*   	on_SIGINTr  ?  s    MN$V:r/   r  )r   r   r   c                       y r_   rN   )r   rH   s     r*   r   r   J  s    r/   c                     t        j                  t        j                  t        j                  t        j
                  g       t        j                  t        j                  t        j                  gt        j                  z          y r_   )
r	   close_open_fdsr6   	__stdin__r   r7   r   execv
executabler   rN   r/   r*   _reload_current_workerr  N  sL    s~~s~~  HHS^^cnn-89r/   c                 0    d }|t         j                  |<   y )Nc                      t        d       t        ddj                  t        j                         d       ddl}|j                  t               ddlm	} t        |_        y)z5Signal handler restarting the current python program.TzRestarting celery worker (r   r   r   Nr   )r   r9   rz   r6   r   atexitregisterr  r   r   r   r   )r   r  r   s      r*   restart_worker_sig_handlerzBinstall_worker_restart_handler.<locals>.restart_worker_sig_handlerW  sE    $-chhsxx.@-ACD./'!r/   r	   r
   )r   r   r  s      r*   r   r   U  s    " 8Icr/   c                 >    t         ry d }|t        j                  | <   y )Nc                  h    t               5  t        t                      ddd       y# 1 sw Y   yxY w)z=Signal handler logging the stack-trace of all active threads.N)r   r9   r   )r   s    r*   cry_handlerz(install_cry_handler.<locals>.cry_handlerg  s%    _ 	SUO	 	 	s   (1)is_pypyr	   r
   )r   r  s     r*   r   r   b  s     )Icr/   c                 p    d }t         j                  j                  |       r|t        j                  |<   y y )Nc                      t               5  ddlm}m} | r| d   n |       j                  } ||       ddd       y# 1 sw Y   yxY w)z=Signal handler setting a rdb breakpoint at the current frame.r   )_frame	set_tracer%   N)r   celery.contrib.rdbr  r  f_back)r   r  r  frames       r*   rdb_handlerz(install_rdb_handler.<locals>.rdb_handlerq  s<    _ 	<  $DGEe	 	 	s	   )=A)r   r   getr	   r
   )envvarr   r  s      r*   r   r   n  s.     
zz~~f!,	# r/   c                 6    fd}|t         j                  <   y )Nc                 z    t               5  t        dj                               d d d        y # 1 sw Y   y xY w)NzH{sig} not supported: Restarting with {sig} is unstable on this platform!r  )r   r9   r   )signumr  r   s     r*   warn_on_HUP_handlerz>install_HUP_not_supported_handler.<locals>.warn_on_HUP_handler  s:    _ 	C 228&S&/C	C 	C 	Cs   1:r  )r   r   r%  s    ` r*   r   r   }  s    C 1Icr/   )SIGHUP)SIGUSR1)CELERY_RDBSIGSIGUSR2)Ar   r   r   r   r   r6   r   	functoolsr   billiard.commonr   billiard.processr   kombu.utils.encodingr   celeryr   r	   r
   
celery.appr   celery.loaders.appr   celery.platformsr   r   r   celery.utilsr   r   celery.utils.debugr   celery.utils.importsr   celery.utils.logr   r   r   celery.utils.textr   r   r   __all__r   rp   r'   	is_jythonhasattrr  r   r   r   r.   r9   r   r   r   r   r  r   r  r   r   r   r   rN   r/   r*   <module>r:     s`    	  
   ) , ) 5 5  ( @ @ % " ) I I ' (
	H	LL##F+	
#*
+
 37B
^ B
J #)f#e-& I")yfz# #*yf# '.yf($ ,AA(;
 !(x)"
:
8	)  /%-1r/   