Ë
    ˜V.j�!  ã                   ó  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ dZ  eed¬«      Z G d„ de!«      Z" G d„ d«      Z# G d„ de#«      Z$y)zIntegration testing utilities.é    N)Údefaultdict)Úpartial)Úcount)ÚAnyÚCallableÚDictÚSequenceÚTextIOÚTuple)ÚContentDisallowed©Úretry_over_time)Ústates)ÚTimeoutError)ÚAsyncResultÚ	ResultSet)Útruncate)Úhumanize_secondsz4Still waiting for {0}.  Trying again {when}: {exc!r}T)Úmicrosecondsc                   ó   — e Zd ZdZy)ÚSentinelzSignifies the end of something.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú`C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/contrib/testing/manager.pyr   r      s   „ Ú)r   r   c                   óÞ   — e Zd ZdZ	 	 dd„Zdd„Zd„ Z	 	 	 	 	 	 	 	 	 dd„Z	 	 	 dd„Zd„ Z	dd	„Z
dd
„Zdd„Zdd„Z	 	 dd„Z	 	 d d„Z	 	 d!d„Z	 dd„Zed„ «       Zdd„Zd„ Zd„ Zdd„Zd„ Zd„ Zy)"ÚManagerMixinz.Mixin that adds :class:`Manager` capabilities.Nc                 óÖ   — |€t         j                  n|| _        |€t         j                  n|| _        | j                  j	                  «       j
                  | _        || _        || _        y ©N)	ÚsysÚstdoutÚstderrÚappÚ
connectionÚrecoverable_connection_errorsÚ
connerrorsÚblock_timeoutÚno_join)Úselfr*   r+   r$   r%   s        r   Ú_init_managerzManagerMixin._init_manager   sO   € ð %+ N”c—j’j¸ˆŒØ$* N”c—j’j¸ˆŒØŸ(™(×-Ñ-Ó/×MÑMˆŒØ*ˆÔØˆ�r   c                 ó:   — t        |› |› �| j                  ¬«       y )N)Úfile)Úprintr$   )r,   ÚsÚseps      r   ÚremarkzManagerMixin.remark(   s   € ä���a�Sˆk §¡Ö,r   c                 ó†   — |D �cg c]1  }|j                   |j                  j                  vsŒ&|j                   ‘Œ3 c}S c c}w r"   )ÚidÚbackendÚ_cache)r,   ÚrÚress      r   Úmissing_resultszManagerMixin.missing_results,   s3   € á"#ÓH¡!˜3 s§v¡v°S·[±[×5GÑ5GÒ'G�—“ !ÑHÐHùÒHs   …'>­>c           
      ó\   ‡ ‡‡‡— |si n|}ˆˆˆˆ fd„} ‰ j                   ||f||||||	dœ|¤ŽS )z‹Wait for event to happen.

        The `catch` argument specifies the exception that means the event
        has not happened yet.
        c           
      óž   •— t        |«      }‰r2‰j                  t        j                  ‰t	        |dd«      | ¬«      «       ‰r
 ‰| ||«       |S )NÚinÚ )ÚwhenÚexc)ÚnextÚwarnÚE_STILL_WAITINGÚformatr   )r@   Ú	intervalsÚretriesÚintervalÚdescÚemit_warningÚerrbackr,   s       €€€€r   Úon_errorz'ManagerMixin.wait_for.<locals>.on_errorG   sT   ø€ Ü˜I“ˆHÙØ—	‘	œ/×0Ñ0ØÔ/°¸$ÀÓDÈ#ð 1ó ô ñ Ù˜˜X wÔ/ØˆOr   )ÚargsÚkwargsrJ   Úmax_retriesÚinterval_startÚinterval_stepr   )r,   ÚfunÚcatchrH   rL   rM   rJ   rN   rO   rP   Úinterval_maxrI   ÚoptionsrK   s   `  `  `    `  r   Úwait_forzManagerMixin.wait_for0   sM   û€ ñ* "‘ vˆ÷	ð $ˆt×#Ñ#Ø�ð
à˜fØ¨+Ø)¸ñ	
ð
 ñ
ð 	
r   c	           
      óL   — 	 | j                  ||||||||¬«      S # |$ r Y yw xY w)z;Make sure something does not happen (at least for a while).)rH   rN   rO   rP   rS   rI   N)rU   ÚAssertionError)
r,   rQ   rR   rH   rN   rO   rP   rS   rI   rT   s
             r   Úensure_not_for_a_whilez#ManagerMixin.ensure_not_for_a_whileY   sE   € ð		FØ—=‘=Ø�U °;Ø-¸]Ø)¸ð !ó ð øð
 ò 	Ùð	ús   ‚ ›#¢#c                 ó   — t        |i |¤ŽS r"   r   )r,   rL   rM   s      r   r   zManagerMixin.retry_over_timej   s   € Ü Ð/¨Ñ/Ð/r   c                 ó†  ‡	— | j                   ry t        |t        «      s| j                  j                  |g«      }g Š	ˆ	fd„}|rt	        |«      n
t        d«      D ]  }g ‰	d d  	  |j                  d	||dœ|¤Žc S  t#        d«      ‚# t        j                  t        f$ ru}| j                  |«      }| j                  dj                  t        |«      t        ‰	«      z
  t        |«      t        dj                  |«      «      |«      d«       Y d }~Œµd }~w| j                   $ r}| j                  d|›�d«       Y d }~Œád }~ww xY w)
Nc                 ó(   •— ‰j                  | «       y r"   )Úappend)Útask_idÚvalueÚreceiveds     €r   Ú	on_resultz$ManagerMixin.join.<locals>.on_resultt   s   ø€ Ø�O‰O˜GÕ$r   r   )ÚcallbackÚ	propagatez#Still waiting for {}/{}: [{}]: {!r}z, Ú!zjoin: connection lost: z!Test failed: Missing task resultsr   )r+   Ú
isinstancer   r&   Úranger   ÚgetÚsocketÚtimeoutr   r:   r3   rD   Úlenr   Újoinr)   rW   )
r,   r8   rb   rN   rM   r`   Úir@   Úwaiting_forr_   s
            @r   rj   zManagerMixin.joinm   s,  ø€ Ø�<Š<ØÜ˜!œYÔ'Ø—‘×"Ñ" A 3Ó'ˆAØˆô	%ñ (3”�{Ô#¼¸a»Ò@ˆAØˆH‘QˆKð
DØ�q—u‘uÐO i¸9ÑOÈÑOÒOð Aô Ð@ÓAÐAøô —N‘N¤LÐ1ò Ø"×2Ñ2°1Ó5�Ø—‘Ø9×@Ñ@Ü˜A›¤ X£Ñ.´°A³Ü  §¡¨;Ó!7Ó8¸#ó?à@C÷ñ ûð
 —?‘?ò DØ—‘Ð5°c°WÐ=¸s×CÑCûðDús%   Á#BÂE ÂA+DÄE Ä!D;Ä;E c                 óN   — | j                   j                  j                  |¬«      S ©N©rh   )r&   ÚcontrolÚinspect)r,   rh   s     r   rq   zManagerMixin.inspect†   s    € Ø�x‰x×Ñ×'Ñ'°Ð'Ó8Ð8r   c              #   ó„   K  —  | j                  |«      j                  |Ž xs i }|j                  «       E d {  –—†  y 7 Œ­wr"   )rq   Ú
query_taskÚitems)r,   Úidsrh   Útaskss       r   Úquery_taskszManagerMixin.query_tasks‰   s5   è ø€ Ø0�—‘˜WÓ%×0Ñ0°#Ð6Ò<¸"ˆØ—;‘;“=× Ò ús   ‚6A ¸>¹A c                 ó¸   — t        t        «      }| j                  ||¬«      D ]4  \  }}|j                  «       D ]  \  }\  }}||   j	                  |«       Œ Œ6 |S rn   )r   Úsetrw   rt   Úadd)	r,   ru   rh   r   ÚhostnameÚreplyr]   ÚstateÚ_s	            r   Úquery_task_stateszManagerMixin.query_task_states�   s]   € ÜœSÓ!ˆØ#×/Ñ/°¸WÐ/ÖE‰OˆH�eØ',§{¡{¦}Ñ#�™˜% Ø�u‘×!Ñ! 'Õ*ñ (5ð  Fð ˆr   c                 óD   —  | j                   | j                  |f||dœ|¤ŽS ©N)rG   rH   )Úassert_task_worker_stateÚis_accepted©r,   ru   rG   rH   Úpolicys        r   Úassert_acceptedzManagerMixin.assert_accepted”   ó4   € à,ˆt×,Ñ,Ø×Ñ˜cð
Ø,4¸4ñ
ØCIñ
ð 	
r   c                 óD   —  | j                   | j                  |f||dœ|¤ŽS r�   )r‚   Úis_receivedr„   s        r   Úassert_receivedzManagerMixin.assert_receivedš   r‡   r   c                 óD   —  | j                   | j                  |f||dœ|¤ŽS r�   )Úassert_task_state_from_resultÚis_result_task_in_progress)r,   Úasync_resultsrG   rH   r…   s        r   Ú,assert_result_tasks_in_progress_or_completedz9ManagerMixin.assert_result_tasks_in_progress_or_completed    s;   € ð 2ˆt×1Ñ1Ø×+Ñ+Øð
ð  Dñ
ð -3ñ
ð 	
r   c                 ób   —  | j                   t        | j                  |||¬«      t        ffi |¤ŽS rn   ©rU   r   Útrue_or_raiser   )r,   rQ   ÚresultsrG   r…   s        r   rŒ   z*ManagerMixin.assert_task_state_from_result­   s6   € àˆt�}‰}Ü�D×&Ñ&¨¨W¸hÔGÜˆKñ
à!ñ
ð 	
r   c                 ól   ‡— t         j                  t         j                  fŠt        ˆfd„| D «       «      S )Nc              3   ó:   •K  — | ]  }|j                   ‰v –— Œ y ­wr"   )r}   )Ú.0ÚresultÚpossible_statess     €r   Ú	<genexpr>z:ManagerMixin.is_result_task_in_progress.<locals>.<genexpr>·   s   øè ø€ ÐIÁ°v�6—<‘< ?Ô2Áùs   ƒ)r   ÚSTARTEDÚSUCCESSÚall)r“   rM   r˜   s     @r   r�   z'ManagerMixin.is_result_task_in_progress´   s&   ø€ ä!Ÿ>™>¬6¯>©>Ð:ˆÜÓIÁÓIÓIÐIr   c                 ób   —  | j                   t        | j                  |||¬«      t        ffi |¤ŽS rn   r‘   )r,   rQ   ru   rG   r…   s        r   r‚   z%ManagerMixin.assert_task_worker_state¹   s6   € Øˆt�}‰}Ü�D×&Ñ&¨¨S¸(ÔCÜˆKñ
à!ñ
ð 	
r   c                 ó.   —  | j                   g d¢|fi |¤ŽS )N)ÚreservedÚactiveÚready©Ú_ids_matches_state©r,   ru   rM   s      r   r‰   zManagerMixin.is_received¿   s$   € Ø&ˆt×&Ñ&Ú+¨Sñ<Ø4:ñ<ð 	<r   c                 ó.   —  | j                   ddg|fi |¤ŽS )Nr    r¡   r¢   r¤   s      r   rƒ   zManagerMixin.is_acceptedÃ   s!   € Ø&ˆt×&Ñ&¨°'Ð':¸CÑJÀ6ÑJÐJr   c                 óV   ‡‡— | j                  ||¬«      Št        ˆˆfd„|D «       «      S )Nro   c           	   3   ót   •‡K  — | ])  Št        ˆfd „‰D �cg c]  }‰|   ‘Œ	 c}D «       «      –— Œ+ yc c}w ­w)c              3   ó&   •K  — | ]  }‰|v –— Œ
 y ­wr"   r   )r–   r1   Úts     €r   r™   z<ManagerMixin._ids_matches_state.<locals>.<genexpr>.<genexpr>É   s   øè ø€ ÐEÑ D˜1��Q”Ñ Dùs   ƒN)Úany)r–   Úkr©   Úexpected_statesr   s     @€€r   r™   z2ManagerMixin._ids_matches_state.<locals>.<genexpr>È   s=   ùè ø€ ð 
á�ô ÓE±OÓ D±O¨q ¨£°OÒ DÓE×EÙùò !Eùs   „8–3¢8)r   rœ   )r,   r¬   ru   rh   r   s    `  @r   r£   zManagerMixin._ids_matches_stateÆ   s2   ù€ Ø×'Ñ'¨°WÐ'Ó=ˆÜô 
áó
ó 
ð 	
r   c                 ó.   —  ||i |¤Ž}|s
t        «       ‚|S r"   )r   )r,   rQ   rL   rM   r9   s        r   r’   zManagerMixin.true_or_raiseÍ   s!   € Ù�4Ð"˜6Ñ"ˆÙÜ“*ÐØˆ
r   c                 ó|  — | j                   j                  }| j                   j                  «       5 }	 |j                  |¬«      }|dk(  rnŒ|j	                  «       }||_        	 	 t        d„ |j                  «       j                  «       D «       «      }|dk(  rnŒ6d d d «       y # t        $ r Y Œw xY w# 1 sw Y   y xY w)N)r'   r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr"   )ri   )r–   r©   s     r   r™   z/ManagerMixin.wait_until_idle.<locals>.<genexpr>â   s   è ø€ ÐJÑ0I¨1¤ A§Ñ0Iùs   ‚)	r&   rp   r'   Úpurgerq   Úsumr    Úvaluesr   )r,   rp   r'   r   rq   s        r   Úwait_until_idlezManagerMixin.wait_until_idleÓ   s»   € Ø—(‘(×"Ñ"ˆØ�X‰X× Ñ Ô" jð ØŸ™°˜Ó<�Ø˜A’:Øð ð —o‘oÓ'ˆGØ!+ˆGÔØðÜÑJ°·±Ó0@×0GÑ0GÔ0IÓJÓJ�Eð ˜A’:Øð ÷ #Ð"øô )ò áðú÷ #Ð"ús/   ±3B2Á%.B#ÂB2Â#	B/Â,B2Â.B/Â/B2Â2B;)g      œ@FNN)Ú-)	Úthingr   NNé
   çš™™™™™¹?ç      à?g      @F)rµ   é   r·   g{®Gáz”?g      ð?F)Fr¶   )g      @)r¸   )r¸   z waiting for tasks to be accepted)r¸   z waiting for tasks to be received)r¸   z,waiting for tasks to be started or completed)r   r   r   r   r-   r3   r:   rU   rX   r   rj   rq   rw   r   r†   rŠ   r�   rŒ   Ústaticmethodr�   r‚   r‰   rƒ   r£   r’   r³   r   r   r   r    r       sÑ   „ Ù8ð 8=Ø*.óó-òIð ØØØØØØØØó'
ðT :<ØAEØ>CóFò"0óBó29ó!óð -0Ø?ó
ð -0Ø?ó
ð Ø?ó	
ð 03ó
ð ñJó ðJó
ò<òKó
òór   r    c                   ó   — e Zd ZdZd„ Zy)ÚManagerz(Test helpers for task integration tests.c                 ó6   — || _          | j                  di |¤Ž y )Nr   )r&   r-   )r,   r&   rM   s      r   Ú__init__zManager.__init__í   s   € ØˆŒØˆ×ÑÑ$˜VÓ$r   N)r   r   r   r   r¾   r   r   r   r¼   r¼   ê   s
   „ Ù2ó%r   r¼   )%r   rg   r#   Úcollectionsr   Ú	functoolsr   Ú	itertoolsr   Útypingr   r   r   r	   r
   r   Úkombu.exceptionsr   Úkombu.utils.functionalr   Úceleryr   Úcelery.exceptionsr   Úcelery.resultr   r   Úcelery.utils.textr   Úcelery.utils.timer   Ú_humanize_secondsrC   Ú	Exceptionr   r    r¼   r   r   r   Ú<module>rÌ      sj   ðÙ $Û Û 
Ý #Ý Ý ß ?× ?å .Ý 2å Ý *ß 0Ý &Ý CàH€áÐ,¸4Ô@Ð ô*ˆyô *÷Lñ Lô^%ˆlõ %r   