
    Ih1                        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,                  j/                  d	d
      Z edi       Z edddh      Z eddh      Z G d dej8                        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j8                     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%y)$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                   ~     e Zd 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.FNc                    t        j                         | _        t        |   |i | | j
                  j                  j                  d      d   dk(  rddlm	}  |       | _
        t        j                         | _        	 ddlm} |j!                          t$        j&                  j)                  | j                  t%        j*                               | _        | j,                  j/                          y y # t"        $ r Y hw xY w)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        V/var/www/html/planif/env/lib/python3.12/site-packages/celery/contrib/testing/worker.pyr"   zTestWorkController.__init__'   s    $??,$)&)==##))#.r2i?& %Dyy{DH2 ((* #*"2"2"@"@ARART[TeTeTg"hD%%' @  s   C4 4	D ?D c                       e Zd Zd Zd Zy)TestWorkController.QueueHandlerc                     d|_         |S )NT)
from_queuer4   records     r8   preparez'TestWorkController.QueueHandler.prepare>   s     $FM    c                 &    t         j                  r y )N)r.   raiseExceptionsr=   s     r8   handleErrorz+TestWorkController.QueueHandler.handleErrorC   s    && 'r@   N)__name__r$   __qualname__r?   rC    r@   r8   QueueHandlerr:   =   s    	
	r@   rG   c                       j                   rT j                   j                         }|j                   fd       t        j                         }|j                  |       t                  S )Nc                 V    | j                   j                  k7  xr t        | dd       S )Nr<   F)processr*   getattr)rr4   s    r8   <lambda>z*TestWorkController.start.<locals>.<lambda>J   s'    		TXX(=(egaQ]_dFeBe r@   )r'   rG   	addFilterr.   r1   
addHandlerr!   r3   )r4   handlerloggerr7   s   `  r8   r3   zTestWorkController.startG   sY    ''(9(9:Gef&&(Fg&w}r@   c                 |    | j                   j                          t        j                  | j                  | |       y)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_readyO   s4     	  88D8 	! 	=r@   c                 8    | j                   j                          y)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_startedV   s     	r@   )rD   r$   rE   __doc____test__r'   r"   r.   r/   rG   r3   rW   rZ   __classcell__)r7   s   @r8   r   r      s>    = HL(,w''44 = r@   r      soloTg      $@c           
   +     K   t         j                  |        d}		 t        | f||||||d|5 }	|r?ddlm}
 t               5  |
j                         j                  |      dk(  sJ 	 ddd       |	 ddd       t        j                  | |	       y# 1 sw Y   -xY w# 1 sw Y   -xY w# t        j                  | |	       w xY w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tasksrg   r   delaygetr   )rV   ra   rb   rc   rd   re   ping_task_timeoutrf   r6   r	   rg   s              r8   start_workerro   a   s     $ S)F<!# ,.9'++3*15G3C, %+, 	 06!'&( Q::<++4E+F&PPPQ L	 	  F ;Q Q	 	 	  F ;sK   C	B- B!&B)B!5B- =C	B	B!!B*&B- -CC	rV   ra   rb   rc   rd   WorkControllerre   rf   returnc              +   "  K   t        | ||       |rd| j                  v sJ | j                  t        j                  j                  d            5 }	|	j                  j                   ddd        |d| ||j                  dt                     |||d|j                  dd      ddd
|}
t        j                  |
j                  d	      }|j                           |
j                          t        d
       	 |
 ddlm} d|_        |j%                  |       |j'                         rt)        d      d|_        y# 1 sw Y   xY w# ddlm} d|_        |j%                  |       |j'                         rt)        d      d|_        w xY ww)zaStart Celery worker in a thread.

    Yields:
        celery.worker.Worker: worker instance.
    zcelery.pingTEST_BROKER)hostnameNrt   without_heartbeatT)
rV   ra   rt   rb   rc   rd   ready_callbackru   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_workerrk   
connectionr(   environrm   default_channelqueue_declarepopr   r   Threadr3   rZ   r
   celery.workerr{   should_terminatejoinis_aliveRuntimeError)rV   ra   rb   rc   rd   rp   re   rf   r6   connr	   tr{   s                r8   rj   rj      sz     h0		)))	!>	? +4**+  J8 **%8$? F 	T:AGGIFe$&'!"	 ::< 
 "&E+ +2 	(!"	 ::< 
 "&s9   AFD>(BF9E
 =AF>EF
AFFc              +      K   ddl m}m} | j                           | |d      g      }|j	                          	 d |j                          y# |j                          w xY w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   ra   rb   rc   rd   r6   r   r   clusters	            r8   _start_worker_processr      sQ      0OOt,-./GMMOs   8A%A A%A""A%c                     | j                          | j                          | j                          dt        | j                        _        | j                  j                  ||       y)z9Setup the app to be used for starting an embedded worker.F)rc   rd   N)finalizer   set_defaulttypelog_setupsetup)rV   rc   rd   s      r8   r|   r|      sC    LLNOOOO DMGGMM8WM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~   rm   r   r   r   r   rp   r   ro   intstrboolfloatrj   r   r|   rF   r@   r8   <module>r      s   -  	  % 1 1  ! F ( 0**..!2G<	  	j)  	: @ .. @ F  	$< $<N ,-%+5D26/A48374&f 4&&)4&"4& $)c?4& #+3-	4&
 *-4& .24& ,14& '/v/D/D&E4& 4&n &'%#2"&	 .6f 6c3h 6# 6RV 6r@   