
    >i                        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	 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j6                        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dZ y)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                   z     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        |   |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        y/var/www/html/wine-match-dev/backend/winematch-backend/venv/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r3   records     r7   preparez'TestWorkController.QueueHandler.prepare:   s     $FM    c                 &    t         j                  r y )N)r-   raiseExceptionsr<   s     r7   handleErrorz+TestWorkController.QueueHandler.handleError?   s    && 'r?   N)__name__r#   __qualname__r>   rB    r?   r7   QueueHandlerr9   9   s    	
	r?   rF   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)rr3   s    r7   <lambda>z*TestWorkController.start.<locals>.<lambda>F   s'    		TXX(=(egaQ]_dFeBe r?   )r&   rF   	addFilterr-   r0   
addHandlerr    r2   )r3   handlerloggerr6   s   `  r7   r2   zTestWorkController.startC   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)r3   r   s     r7   on_consumer_readyz$TestWorkController.on_consumer_readyK   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)r3   s    r7   ensure_startedz!TestWorkController.ensure_startedR   s     	r?   )rC   r#   rD   __doc__r&   r!   r-   r.   rF   r2   rV   rY   __classcell__)r6   s   @r7   r   r      s7    =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.
    )rR   N)concurrencypoolloglevellogfileperform_ping_checkshutdown_timeoutr\   )ping)timeoutpong)rR   r   )	r   rT   _start_worker_threadtasksre   r
   delaygetr   )rU   r_   r`   ra   rb   rc   ping_task_timeoutrd   r5   r   re   s              r7   start_workerrm   ]   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	c              +     K   t        | ||       |rd| j                  v sJ | j                  t        j                  j                  d            5 }	|	j                  j                   ddd        |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)hostnameNwithout_heartbeatT)
rU   r_   rp   r`   ra   rb   ready_callbackrq   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.rE   )setup_app_for_workerri   
connectionr'   environrk   default_channelqueue_declarer   popr   Threadr2   rY   r	   celery.workerrw   should_terminatejoinis_aliveRuntimeError)rU   r_   r`   ra   rb   WorkControllerrc   rd   r5   connr   trw   s                r7   rh   rh      so      h0		)))	!>	? +4**+   **%8$? F 	T:AGGIFe$&'!"	 ::< 
 "&E+ +2 	(!"	 ::< 
 "&s9   AE?D.(B E?)D: -AE?.D73E?:AE<<E?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_currentr2   stopwait)	rU   r_   r`   ra   rb   r5   r   r   clusters	            r7   _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)ra   rb   N)finalizer   set_defaulttypelog_setupsetup)rU   ra   rb   s      r7   rx   rx      sE     LLNOOOO DMGGMM8WM5r?   )returnN)!rZ   r-   r'   r   
contextlibr   typingr   r   r   celery.worker.consumerceleryr   r   celery.resultr	   r
   celery.utils.dispatchr   celery.utils.nodenamesr   rz   rk   r   r   r   r   r   r   rm   rh   r   rx   rE   r?   r7   <module>r      s
   -  	  % ' '  ! F ( 0**..!2G<	  	j)  	: < .. < ~  	$< $<N %&$"1!%(:,0*.5& 5&p &'%#2"&	 .6r?   