Ë
    ˜V.j˜  ã                   óô  — 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                   ó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(  ržd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        €ú_C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/contrib/testing/worker.pyr"   zTestWorkController.__init__#   sÍ   ø€ ä$Ÿ?™?Ó,ˆÔä‰Ñ˜$Ð) &Ò)à�=‰=×#Ñ#×)Ñ)¨#Ó.¨rÑ2°iÒ?Ý&Ù %£ˆDÔÜ—y‘y“{ˆDŒHðÝ2Ø ×(Ñ(Ô*ô #*×"2Ñ"2×"@Ñ"@À×ARÑARÔT[×TeÑTeÓTgÓ"hˆDÔØ×Ñ×%Ñ%Õ'ð @øô ò Ùðú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.handleError?   s   € Ü×&Ò&Øð 'r@   N)Ú__name__r$   Ú__qualname__r?   rC   © r@   r8   ÚQueueHandlerr:   9   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>F   s(   ø€ ¨¯	©	°T·X±XÑ(=Ò(eÄgÈaÐQ]Ð_dÓFeÐBeÐ(er@   )r'   rG   Ú	addFilterr.   r1   Ú
addHandlerr!   r3   )r4   ÚhandlerÚloggerr7   s   `  €r8   r3   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)r4   r   s     r8   Úon_consumer_readyz$TestWorkController.on_consumer_readyK   s4   € ð 	×Ñ×ÑÔÜ× Ñ Ø—8‘8 D°8ð 	!õ 	=r@   c                 ó8   — | j                   j                  «        y)z±Wait 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      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.
    )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Ø*1Ø5GØ3Cñ,ð %+ò,ð 06Ù!Ý'Ü&Õ(ØŸ:™:›<×+Ñ+Ð4EÐ+ÓFÈ&ÒPÐPÑP÷ )ð ŠL÷,ô 	× Ñ ¨°FÐ Õ;÷ )Ð(ú÷,ð ,ûô 	× Ñ ¨°FÐ Õ;üsK   ‚C	œB- ¯B!Á&BÁ)B!Á5B- Á=C	ÂB	ÂB!Â!B*Â&B- Â-CÃC	rV   r`   ra   rb   rc   ÚWorkControllerrd   re   Úreturnc              +   ó  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)
rV   r`   rs   ra   rb   rc   Úready_callbackrt   Úwithout_mingleÚwithout_gossip)ÚtargetÚdaemonFr   )Ústatez„Worker 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   …   sj  è ø€ ô ˜˜h¨Ô0ÙØ §	¡	Ñ)Ð)Ð)à	�‰¤§¡§¡°Ó!>ˆÔ	?À4Ø×Ñ×*Ò*÷ 
@ñ ð ØØÜ“ØØØàØ Ÿ*™*Ð%8¸$Ó?ØØñð ñ€Fô 	×Ñ §¡°TÔ:€AØ‡G�G„IØ€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_currentr3   Ústopwait)	rV   r`   ra   rb   rc   r6   rŠ   r‹   Úclusters	            r8   Ú_start_worker_processr�   ½   sQ   è ø€ ÷ 0à‡O�OÔÙ‘tÐ,Ó-Ð.Ó/€GØ‡M�M„OðÛà×ÑÕøˆ×ÑÕü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)rb   rc   N)Úfinalizer�   Úset_defaultÚtypeÚlogÚ_setupÚsetup)rV   rb   rc   s      r8   r{   r{   Õ   sC   € à‡L�L„NØ‡O�OÔØ‡O�OÔØ „Dˆ�‰ƒMÔØ‡G�G‡M�M˜8¨W€MÕ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ã ß !ß FÝ (Ý 0à—*‘*—.‘.Ð!2°GÓ<€áØ	ØôÐ ñ Ø	Ø˜jÐ)ôÐ ñ Ø	Ø�:ôÐ ô< ˜×.Ñ.ô < ð~ ð Ø	ØØØØØò$<ó ð$<ðN à,-Ø%+Ø5DØ26Ø/AØ48Ø37ñ4&˜fð 4&Ø&)ð4&à"ð4&ð $)¨¨c¨¡?ð4&ð #+¨3¡-ð	4&ð
 *-ð4&ð .2ð4&ð ,1ð4&ð '/¨v×/DÑ/DÑ&Eò4&ó ð4&ðn à&'Ø%Ø#2Ø"&ò	ó ðð.6˜fð 6°°c¸3°h±ð 6È#ð 6ÐRVô 6r@   