
     h                        d Z ddlZddlZddlmZ ddl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            Zeddedfd            Zd ZdS )z'Embedded workers for integration tests.    N)contextmanager)AnyIterable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                   .     e Zd ZdZ fdZd Zd Z xZS )TestWorkControllerz3Worker that can synchronize on being fully started.c                 j    t          j                    | _         t                      j        |i | d S )N)	threadingEvent_on_startedsuper__init__)selfargskwargs	__class__s      Y/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/celery/contrib/testing/worker.pyr   zTestWorkController.__init__    s5    $?,,$)&)))))    c                 |    | j                                          t                              | j        | |           dS )z=Callback called when the Consumer blueprint is fully started.)senderr   r   N)r   setr   sendapp)r   r   s     r!   on_consumer_readyz$TestWorkController.on_consumer_ready%   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)r   s    r!   ensure_startedz!TestWorkController.ensure_started,   s     	r"   )__name__
__module____qualname____doc__r   r(   r+   __classcell__)r    s   @r!   r   r      s\        ==* * * * *
= = =             r"   r      soloTg      $@c           
   +     K   t                               |            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 )	z[Start embedded worker.

    Yields:
        celery.app.worker.Worker: worker instance.
    )r$   )concurrencypoolloglevellogfileperform_ping_checkshutdown_timeoutr1   )ping)timeoutpongN)r$   r   )	r   r&   _start_worker_threadtasksr:   r
   delaygetr   )r'   r4   r5   r6   r7   r8   ping_task_timeoutr9   r   r   r:   s              r!   start_workerrB   7   s     $ S)))	c 
(*5#''/&-1C/?
( 
( !'
( 
(  ,2 	M######"$$ M Mzz||''0A'BBfLLLLLM M M M M M M M M M M M M M M                C77777s5   B 	/B9B B			B B		B  B$'B$c              +     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 )zaStart Celery worker in a thread.

    Yields:
        celery.worker.Worker: worker instance.
    zcelery.pingTEST_BROKER)hostnameNwithout_heartbeatT)
r'   r4   rE   r5   r6   r7   ready_callbackrF   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. )setup_app_for_workerr>   
connectionosenvironr@   default_channelqueue_declarer   popr   Threadstartr+   r	   celery.workerrL   should_terminatejoinis_aliveRuntimeError)r'   r4   r5   r6   r7   WorkControllerr8   r9   r   connr   trL   s                r!   r=   r=   \   s       h000 *	))))	!>!>	?	? +4**+ + + + + + + + + + + + + + + ^  **%8$??   F 	T:::AGGIIIFe$$$
LLL######EFFzz|| 

 
 	

 "Es   A--A14A1c              +      K   ddl m}m} |                                   | |d          g          }|                                 dV  |                                 dS )zfStart worker in separate process.

    Yields:
        celery.app.worker.Worker: worker instance.
    r   )ClusterNodeztestworker1@%hN)celery.apps.multir`   ra   set_currentrV   stopwait)	r'   r4   r5   r6   r7   r   r`   ra   clusters	            r!   _start_worker_processrf      s{       0///////OOgtt,--.//GMMOOO	EEEr"   c                     |                                   |                                  |                                  dt          | j                  _        | j                            ||           dS )z9Setup the app to be used for starting an embedded worker.F)r6   r7   N)finalizerc   set_defaulttypelog_setupsetup)r'   r6   r7   s      r!   rN   rN      s_     LLNNNOOOO DMMGMM8WM55555r"   ) r/   rP   r   
contextlibr   typingr   r   r   celery.worker.consumerceleryr   r   celery.resultr	   r
   celery.utils.dispatchr   celery.utils.nodenamesr   rQ   r@   r   r   r   r   r\   r   rB   r=   rf   rN   rM   r"   r!   <module>ru      s   - - 				     % % % % % % ' ' ' ' ' ' ' ' ' '     ! ! ! ! ! ! ! ! F F F F F F F F ( ( ( ( ( ( 0 0 0 0 0 0*..!2G<<v	    f	j)    f	:            .      4  	!8 !8 !8 !8H %&$"1!%(:,0*.4" 4" 4" 4"n &'%#2"&	   *6 6 6 6 6r"   