
    `f                     "   d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
 ddlZddlmZmZ ddlmZmZ ddlmZ ddlmZ ej                            d	d
          Z edi           Z edddh          Z eddh          Z G d dej                  Zeddeddddfd            Zeddededdfdedede de
e ef         de	e          dede!de"d eej                 fd!            Z#eddedfd"            Z$dede
e ef         de d dfd#Z%dS )$z'Embedded workers for integration tests.    N)contextmanager)AnyIterableOptionalUnion)Celeryworker)_set_task_join_will_blockallow_join_result)Signal)anon_nodenameWORKER_LOGLEVELerrortest_worker_starting)nameproviding_argstest_worker_startedr	   consumertest_worker_stoppedc                   l     e Zd ZdZdZ fdZ G d dej        j                  Z fdZ	d Z
d Z xZS )	TestWorkControllerz3Worker that can synchronize on being fully started.Nc                    t          j                    | _         t                      j        |i | | j        j                            d          d         dk    rddlm	}  |            | _
        t          j                    | _        	 ddlm} |                                 n# t"          $ r Y nw xY wt$          j                            | j
        t%          j                              | _        | j                                         d S d S )N.preforkr   )Queue)pickling_support)	threadingEvent_on_startedsuper__init__pool_cls
__module__splitbilliardr   logger_queueosgetpidpidtblibr   installImportErrorlogginghandlersQueueListener	getLoggerqueue_listenerstart)selfargskwargsr   r   	__class__s        O/var/www/html/env/lib/python3.11/site-packages/celery/contrib/testing/worker.pyr"   zTestWorkController.__init__#   s   $?,,$)&)))=#))#..r2i??&&&&&& %Dy{{DH222222 ((****   
 #*"2"@"@ART[TeTgTg"h"hD%%''''' @?s   
B% %
B21B2c                       e Zd Zd Zd ZdS )TestWorkController.QueueHandlerc                     d|_         |S )NT)
from_queuer4   records     r8   preparez'TestWorkController.QueueHandler.prepare:   s     $FM    c                      t           j        r d S )N)r.   raiseExceptionsr=   s     r8   handleErrorz+TestWorkController.QueueHandler.handleError?   s    &  r@   N)__name__r$   __qualname__r?   rC    r@   r8   QueueHandlerr:   9   s2        	 	 	
	 	 	 	 	r@   rG   c                      j         rZ                      j                   }|                     fd           t          j                    }|                    |           t                                                      S )Nc                 H    | j         j        k    ot          | dd           S )Nr<   F)processr*   getattr)rr4   s    r8   <lambda>z*TestWorkController.start.<locals>.<lambda>F   s&    	TX(=(egaQ]_dFeFeBe r@   )r'   rG   	addFilterr.   r1   
addHandlerr!   r3   )r4   handlerloggerr7   s   `  r8   r3   zTestWorkController.startC   sw     	'''(9::Geeeefff&((Fg&&&ww}}r@   c                 |    | j                                          t                              | j        | |           dS )z=Callback called when the Consumer blueprint is fully started.)senderr	   r   N)r    setr   sendapp)r4   r   s     r8   on_consumer_readyz$TestWorkController.on_consumer_readyK   sI     	  8D8 	! 	= 	= 	= 	= 	=r@   c                 8    | j                                          dS )zWait for worker to be fully up and running.

        Warning:
            Worker must be started within a thread for this to work,
            or it will block forever.
        N)r    wait)r4   s    r8   ensure_startedz!TestWorkController.ensure_startedR   s     	r@   )rD   r$   rE   __doc__r'   r"   r.   r/   rG   r3   rW   rZ   __classcell__)r7   s   @r8   r   r      s        ==L( ( ( ( (,    w'4       = = =             r@   r      soloTg      $@c           
   +     K   t                               |            d}		 t          | f||||||d|5 }	|r[ddlm}
 t                      5  |
                                                    |          dk    sJ 	 ddd           n# 1 swxY w Y   |	V  ddd           n# 1 swxY w Y   t                              | |	           dS # t                              | |	           w xY w)	z[Start embedded worker.

    Yields:
        celery.app.worker.Worker: worker instance.
    )rS   N)concurrencypoolloglevellogfileperform_ping_checkshutdown_timeoutr]   )ping)timeoutpong)rS   r	   )	r   rU   _start_worker_threadtasksrf   r   delaygetr   )rV   r`   ra   rb   rc   rd   ping_task_timeoutre   r6   r	   rf   s              r8   start_workerrn   ]   s     $ S)))F<!# ,.9'++3*15G3C, , %+, , 	 06! Q''''''&(( Q Q::<<++4E+FF&PPPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  F ;;;;;  F ;;;;sR   C B#/B<B#B	B#B	B#C #B''C *B'+C C*rV   r`   ra   rb   rc   WorkControllerrd   re   returnc              +   8  K   t          | ||           |rd| j        v sJ |                     t          j                            d                    5 }	|	j        j         ddd           n# 1 swxY w Y    |d| |t                      |||d|	                    dd          ddd
|}
t          j        |
j        d          }|                                  |
j                     t          d	           	 |
V  d
dlm} d
|_        |                    |           |                                rt)          d          d|_        dS # d
dlm} d
|_        |                    |           |                                rt)          d          d|_        w xY w)zaStart Celery worker in a thread.

    Yields:
        celery.worker.Worker: worker instance.
    zcelery.pingTEST_BROKER)hostnameNwithout_heartbeatT)
rV   r`   rs   ra   rb   rc   ready_callbackrt   without_minglewithout_gossip)targetdaemonFr   )statezWorker thread failed to exit within the allocated timeout. Consider raising `shutdown_timeout` if your tasks take longer to execute.rF   )setup_app_for_workerrj   
connectionr(   environrl   default_channelqueue_declarer   popr   Threadr3   rZ   r
   celery.workerrz   should_terminatejoinis_aliveRuntimeError)rV   r`   ra   rb   rc   ro   rd   re   r6   connr	   trz   s                r8   ri   ri      s1      h000 *	))))	!>!>	?	? +4**+ + + + + + + + + + + + + + + ^  **%8$??   F 	T:::AGGIIIFe$$$&''''''!"	   ::<< 	  
 "& 	('''''!"	   ::<< 	  
 "&%%%%s   A--A14A19E AFc              +      K   ddl m}m} |                                   | |d          g          }|                                 	 dV  |                                 dS # |                                 w xY w)zfStart worker in separate process.

    Yields:
        celery.app.worker.Worker: worker instance.
    r   )ClusterNodeztestworker1@%hN)celery.apps.multir   r   set_currentr3   stopwait)	rV   r`   ra   rb   rc   r6   r   r   clusters	            r8   _start_worker_processr      s       0///////OOgtt,--.//GMMOOOs   	A# #A9c                     |                                   |                                  |                                  dt          | j                  _        | j                            ||           dS )z9Setup the app to be used for starting an embedded worker.F)rb   rc   N)finalizer   set_defaulttypelog_setupsetup)rV   rb   rc   s      r8   r{   r{      s]    LLNNNOOOO DMMGMM8WM55555r@   )&r[   r.   r(   r   
contextlibr   typingr   r   r   r   celery.worker.consumerceleryr   r	   celery.resultr
   r   celery.utils.dispatchr   celery.utils.nodenamesr   r}   rl   r   r   r   r   ro   r   rn   intstrboolfloatri   r   r{   rF   r@   r8   <module>r      s   - -  				     % % % % % % 1 1 1 1 1 1 1 1 1 1 1 1     ! ! ! ! ! ! ! ! F F F F F F F F ( ( ( ( ( ( 0 0 0 0 0 0*..!2G<<v	    f	j)    f	:   <  <  <  <  < . <  <  < ~  	$< $< $< $<N ,-%+5D26/A48374& 4&f 4&&)4&"4& $)c?4& #+3-	4&
 *-4& .24& ,14& '/v/D&E4& 4& 4& 4&n &'%#2"&	   .6f 6c3h 6# 6RV 6 6 6 6 6 6r@   