o
    ›¨Êho  ã                    @   sœ  d Z ddl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mZmZmZmZ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d	lmZ dd
lmZmZ ddlZddl Zddl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,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z> dZ?ddl@mAZA e4eBƒZCdZDdZEdZFdZGdZHdZIdZJeddƒZKeKeId ejLd!d!ƒZMeKeHd"ejNddƒZOeKeGd#ejPd!d!ƒZQeKeFd$ejNddƒZReKeFd%ejSd!d!ƒZTe#jUjVZWe#jXjVZYe#jZjVZ[e$j\Z\e$j]Z]e$j^Z^e$j_Z_e$j`Z`e$jaZae$jbZbece^e`e_hƒZdg Zei Zfed&d'ƒZgd(d)„ Zhd*d+„ Zid,d-„ Zjd.d/„ ZkG d0d1„ d1ƒZldUd2d3„Zmddd4eld5d5dejnegedf
d6eod7eej)ejpjqf d8eejrjsjt d9eeo d:eud;eel d<eud=eud>eejv d?e	g ewf d&eeg d@eeo dAe	eoeedBf e
eoef egegf fdCdD„ZxdUdEdF„ZydGdH„ ZzedfdIdJ„Z{eddfdKdL„Z|dMdN„ Z}dUdOdP„Z~e!fdQdR„ZdSdT„ Z€dS )Vz‚Trace task execution.

This module defines how the task execution is traced:
errors are recorded, handlers are applied and so on.
é    N)Ú
namedtuple)	ÚAnyÚCallableÚDictÚ	FrozenSetÚOptionalÚSequenceÚTupleÚTypeÚUnion)Úwarn)ÚExceptionInfoÚExceptionWithTraceback)ÚEncodeError)Úloads)Úprepare_accept_content)Ú	safe_reprÚsafe_str)Úcurrent_appÚgroupÚsignalsÚstates)Ú_task_stack)ÚContext)ÚTask)ÚBackendGetMetaErrorÚIgnoreÚInvalidTaskErrorÚRejectÚRetry)ÚAsyncResult)Ú
get_logger)Úgethostname)Ú
mro_lookup)Úsaferepr)Úget_pickleable_etypeÚget_pickleable_exceptionÚget_pickled_exception)Ú	TraceInfoÚbuild_tracerÚ
trace_taskÚsetup_worker_optimizationsÚreset_worker_optimizations)Úsuccessful_requestszTask %(name)s[%(id)s] receivedzATask %(name)s[%(id)s] succeeded in %(runtime)ss: %(return_value)sz.Task %(name)s[%(id)s] %(description)s: %(exc)sz%Task %(name)s[%(id)s] %(description)szTask %(name)s[%(id)s] %(exc)sz$Task %(name)s[%(id)s] retry: %(exc)sÚlog_policy_t)ÚformatÚdescriptionÚseverityÚ	tracebackÚmailÚrejectedé   ÚignoredzINTERNAL ERRORzraised expectedzraised unexpectedÚ
trace_ok_t)ÚretvalÚinfoÚruntimeÚretstrc                 C   s   t j| |d|id� dS )zzLog 'fmt % context' with severity 'INFO'.

    'context' is also passed in extra with key 'data' for custom handlers.
    Údata)ÚextraN)Úloggerr9   )ÚfmtÚcontext© rA   úB/var/www/html/env/lib/python3.10/site-packages/celery/app/trace.pyr9   ~   s   r9   c                 C   s   t | j|tthdgd�S )z+Return true if the task overrides ``attr``.zcelery.app.task)ÚstopÚmonkey_patched)r#   Ú	__class__ÚBaseTaskÚobject)ÚtaskÚattrrA   rA   rB   Útask_has_custom†   s   ÿrJ   c                 C   s@   t |tƒrtS t |tƒrtS |jrtS | jrt || jƒrtS t	S ©N)
Ú
isinstancer   Úlog_policy_rejectr   Úlog_policy_ignoreÚinternalÚlog_policy_internalÚthrowsÚlog_policy_expectedÚlog_policy_unexpected)rH   ÚeinfoÚexcrA   rA   rB   Úget_log_policyŒ   s   

rV   c                 C   s   t | ddƒp|S )z8Use 'shadow' in request for the task name if applicable.ÚshadowN)Úgetattr)ÚrequestÚdefaultrA   rA   rB   Úget_task_name™   s   r[   c                   @   sV   e Zd ZdZdZddd„Z	ddd	„Zd
d„ Zdd„ Zddd„Z	ddd„Z
dd„ ZdS )r(   z!Information about task execution.©Ústater8   Nc                 C   s   || _ || _d S rK   r\   )Úselfr]   r8   rA   rA   rB   Ú__init__¥   s   
zTraceInfo.__init__FTc                 C   sF   |j r|j}n|r|jrd}n| }t| jt| ji| j ||||d�S )NT)Ústore_errorsÚcall_errbacks)Úignore_resultÚstore_errors_even_if_ignoredÚstore_eager_resultÚRETRYÚhandle_retryÚFAILUREÚhandle_failurer]   )r^   rH   ÚreqÚeagerra   r`   rA   rA   rB   Úhandle_error_state©   s   
þýûzTraceInfo.handle_error_statec                 K   ó   |   ||tƒ ¡ d S rK   ©Ú
_log_errorr   ©r^   rH   ri   ÚkwargsrA   rA   rB   Úhandle_reject¹   ó   zTraceInfo.handle_rejectc                 K   rl   rK   rm   ro   rA   rA   rB   Úhandle_ignore¼   rr   zTraceInfo.handle_ignorec           
      K   sœ   t  ¡ \}}}zD| j}t|||fƒ}	|r!|jj|j|j|	j|d� | 	|j|j|j
|j|	¡ tjj||||	d� tt|jt||jƒt|ƒdœƒ |	W ~S ~w )zHandle retry exception.©rY   )ÚsenderrY   ÚreasonrT   )ÚidÚnamerU   )ÚsysÚexc_infor8   r   ÚbackendÚmark_as_retryrw   rU   r2   Úon_retryÚargsrp   r   Ú
task_retryÚsendr9   Ú	LOG_RETRYr[   rx   Ústr)
r^   rH   ri   r`   rp   Útype_Ú_Útbrv   rT   rA   rA   rB   rf   ¿   s&   ÿ
ÿ
ýzTraceInfo.handle_retryc           
   	   C   s®   | j }t|ƒ}|jdu rt ¡ \}}|_tt|ƒƒ}t|||jfd�}	|jj	|j
||	j|||d� | ||j
|j|j|	¡ tjj||j
||j|j|j|	d� |  |||	¡ |	S )zHandle exception.N©rz   )rY   Ústore_resultra   )ru   Útask_idÚ	exceptionr~   rp   r2   rT   )r8   r&   Ú__traceback__ry   rz   r%   Útyper   r{   Úmark_as_failurerw   r2   Ú
on_failurer~   rp   r   Útask_failurer€   rn   )
r^   rH   ri   r`   ra   Úorig_excrU   r„   Úexc_typerT   rA   rA   rB   rh   ×   s(   

ýüzTraceInfo.handle_failurec              
   C   sÌ   t |jƒ }|_t|tƒr|j }|_t|ƒt|jƒ|j| 	d¡p%t|j
ƒ| 	d¡p.t|jƒf\}}}}}	t|||ƒ}
|j|jt||jƒ||||	|
j|jdœ	}tj|
j|
j ¡ ||
jr]|nd d|id� d S )NÚargsreprÚ
kwargsrepr)	Úhostnamerw   rx   rU   r2   r~   rp   r0   rO   r<   )rz   r=   )r'   r‰   rL   r   rU   r   r   r2   rz   Úgetr~   rp   rV   r“   rw   r[   rx   r0   rO   r>   Úlogr1   r/   Ústrip)r^   rH   ri   rT   Úeobjr‰   r2   rz   ÚsargsÚskwargsÚpolicyr@   rA   rA   rB   rn   õ   s0   
û
÷
þzTraceInfo._log_errorrK   )FT)T)TT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r_   rk   rq   rs   rf   rh   rn   rA   rA   rA   rB   r(       s    

ÿ

r(   c                 C   s„   d }| d urt | dƒr| j}nt ¡ \}}}nt ¡ \}}}|d ur@z|j ¡  |jj W n	 ty6   Y nw |j}|d us"d S d S )NrŠ   )	ÚhasattrrŠ   ry   rz   Útb_frameÚclearÚf_localsÚRuntimeErrorÚtb_next)rU   r…   r„   rA   rA   rB   Útraceback_clear  s   

þùr¦   TFrx   rH   Úloaderr“   r`   ÚInforj   Ú	propagateÚappÚ	monotonicÚIGNORE_STATESÚreturn.c              !      s   t ˆdƒrˆnˆj‰|pˆj}ˆj}ˆj‰ˆ oˆjo| ‰ˆr(|s(ˆjr(d‰nˆ o-| ‰ˆjjs5ˆjo<ˆjj	o<ˆj
j‰ˆpAtƒ ‰ˆjj‰|j‰
|j‰	d‰d‰d‰t ˆdƒrZˆj‰t ˆdƒrbˆj‰t ˆdƒrjˆj‰t ¡ ‰ˆj}|j‰|j‰tj‰tj‰t tj¡‰ˆj‰tjj ‰tj!j ‰tj"j ‰ddl#m$} |j%‰t&dfd	t#j'j(j)d
t*t+t,t+ f dt-dt.dt/ˆt0t0t0f f
‡‡‡‡fdd„‰	ddt-dt1t0 dt2t-t0f d	t3t2t-t0f  dˆf
‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡fdd„}|S )a=  Return a function that traces task execution.

    Catches all exceptions and updates result backend with the
    state and result.

    If the call was successful, it saves the result to the task result
    backend, and sets the task status to `"SUCCESS"`.

    If the call raises :exc:`~@Retry`, it extracts
    the original exception, uses that as the result and sets the task state
    to `"RETRY"`.

    If the call results in an exception, it saves the exception as the task
    result, and sets the task state to `"FAILURE"`.

    Return a function that takes the following arguments:

        :param uuid: The id of the task.
        :param args: List of positional args to pass on to the function.
        :param kwargs: Keyword arguments mapping to pass on to the function.
        :keyword request: Request dict.

    Ú__call__TNÚbefore_startÚ
on_successÚafter_returnr   )ÚcanvasrY   rU   r]   ra   r­   c                    s2   ˆr‚ ˆ ||ƒ}|j ˆ| ˆ|d�}|||j|jfS )z1Handle any errors raised by a `Task`'s execution.)rj   ra   )rk   r]   r8   )rY   rU   r]   ra   ÚIÚR)r¨   rj   r©   rH   rA   rB   Úon_error†  s   
ÿzbuild_tracer.<locals>.on_errorÚuuidr~   rp   c                    sj  d } } } } }}	d}
ˆƒ }�z`z|j  W n ty#   tdƒ‚w t|p(i |d|d�}
|
jo7|
j dd¡}ˆrx|rx|
jtv rIˆ||||ƒW S t|
jˆd�}z|j	}	W n	 t
y^   Y nw |	tkrxtt|
jt|
ˆƒddœƒ ˆ||||ƒW S ˆˆƒ |
jp€| }ˆr‰|
j d	¡nd}ˆ|
ƒ �zZˆrœtˆ| ˆ||d
� ˆ
| ˆƒ ˆr°ˆjj| ˆˆdœt|
d� zˆr¹ˆ| ||ƒ ˆ|i |¤Ž }}t}	W n¨ tyô } z#ˆt|ƒtdd�}}|j	|j}	}| ˆ|
¡ t|ƒ W Y d}~�ncd}~w t�y# } z#ˆt|ƒtdd�}}|j	|j}	}| ˆ|
¡ t|ƒ W Y d}~�n4d}~w t�yF } zˆ|
|tdd�\}}}	}t|ƒ W Y d}~�nd}~w t�ye } zˆ|
|ƒ\}}}	}t|ƒ W Y d}~nòd}~w t �ym   ‚ w z‰ˆj!j"}|�rÔt#ˆj!j"ƒdk�rÄg g }}|D ]}ˆ|ˆd�}t$|t%ƒ�r›| &|¡ �q†| &|¡ �q†|D ]}|j'|f| ||d� �q¤|�rÃt%|ˆd�j'|f| ||d� nˆ|d ˆd�j'|f| ||d� |
j(}|�ríˆ| )¡ ˆd�}|j'|f|| ||d� ˆj *| ||
ˆ¡ W n t+�y } zˆ|
|ƒ\}}}	}W Y d}~nDd}~ww t,|ˆƒ}ˆƒ | }ˆ�r(ˆ|| ||ƒ ˆ�r1t-ˆ|d� ˆ�rStt.| t|
ˆƒ|||
 d¡�pFt/|ƒ|
 d¡�pOt/|ƒdœƒ |	ˆ v�rdˆ�rdˆ|	|| ||dƒ W zJˆ�rtt0ˆ| ˆ||||	d� W ˆƒ  ˆƒ  ˆ�s¯z
ˆj 1¡  ˆ	ƒ  W nè t2t3t4f�y”   ‚  t�y® } zt5j6d|dd� W Y d}~nÇd}~ww nÁˆƒ  ˆƒ  ˆ�sêz
ˆj 1¡  ˆ	ƒ  W w  t2t3t4f�yÏ   ‚  t�yé } zt5j6d|dd� W Y d}~w d}~ww w zJˆ�rút0ˆ| ˆ||||	d� W ˆƒ  ˆƒ  ˆ�s5z
ˆj 1¡  ˆ	ƒ  W w  t2t3t4f�y   ‚  t�y4 } zt5j6d|dd� W Y d}~w d}~ww w ˆƒ  ˆƒ  ˆ�spz
ˆj 1¡  ˆ	ƒ  W w  t2t3t4f�yU   ‚  t�yo } zt5j6d|dd� W Y d}~w d}~ww w W n; t4�y{   ‚  t�y­ } z&t7ˆ| ||||ƒ ˆ�r�‚ t8ˆ|ƒ}|
du�r£ˆ|
|ƒ\}}}}W Y d}~nd}~ww ˆ||||ƒS )zExecute and trace a `Task`.Nz'Task keyword arguments is not a mappingF)r~   Úcalled_directlyrp   Úredelivered©rª   z$Task already completed successfully.)rw   rx   r0   Úpriority)ru   rˆ   rH   r~   rp   )Úpidr“   rt   T©rO   )ra   r5   )Ú	parent_idÚroot_idrº   r   )Úchainr½   r¾   rº   )ru   Úresultr‘   r’   )rw   rx   Úreturn_valuer:   r~   rp   )ru   rˆ   rH   r~   rp   r8   r]   zProcess cleanup failed: %rr†   )9ÚitemsÚAttributeErrorr   r   Údelivery_infor”   rw   r-   r    r]   r   ÚSUCCESSr9   ÚLOG_IGNOREDr[   r¾   Úsend_prerunr{   r‡   ÚSTARTEDr   ÚREJECTEDr   r8   rq   r¦   r   ÚIGNOREDrs   r   re   Ú	ExceptionÚBaseExceptionrY   Ú	callbacksÚlenrL   r   ÚappendÚapply_asyncr¿   ÚpopÚmark_as_doner   r$   Úsend_successÚLOG_SUCCESSr   Úsend_postrunÚprocess_cleanupÚKeyboardInterruptÚ
SystemExitÚMemoryErrorr>   ÚerrorÚ_signal_internal_errorÚreport_internal_error)r¶   r~   rp   rY   r´   r³   ÚTÚRstrr8   r]   Útask_requestÚ
time_startr¸   Úrr¾   Útask_priorityrU   rÍ   ÚsigsÚgroupsÚsigÚgroup_r¿   Ú_chsigr„   )r¬   r¨   Ú
_does_inforª   Údeduplicate_successful_tasksrj   Úfunr“   Úinherit_parent_priorityÚloader_cleanupÚloader_task_initr«   rx   rµ   r»   Úpop_requestÚpop_taskÚpostrun_receiversÚprerun_receiversÚpublish_resultÚpush_requestÚ	push_taskÚresultrepr_maxsizeÚ	signatureÚsuccess_receiversrH   Útask_after_returnÚtask_before_startÚtask_on_successr7   Útrack_startedrA   rB   r*   ”  sÎ  
ÿÿ
ÿÿ

ÿý
ÿÿÿ
þ€€ÿ€€ÿ

ýý€þýÿ€ÿ

ú

ÿ€þ€

ÿ€ÿúþ

ÿ€ÿúøþ€

ÿ€ÿúþ

ÿ€ÿú€	

€úz build_tracer.<locals>.trace_taskrK   )4rJ   Úrunr§   rb   rû   rd   ÚconfÚtask_acks_lateÚ	acks_lateÚ#worker_deduplicate_successful_tasksr{   Ú
persistentr"   Útask_inherit_parent_priorityÚon_task_initÚon_process_cleanupr¯   r°   r±   ÚosÚgetpidÚrequest_stackÚpushrÑ   r   r>   ÚisEnabledForÚloggingÚINFOrõ   r   Útask_prerunÚ	receiversÚtask_postrunÚtask_successÚceleryr²   Úmaybe_signaturerg   rª   rH   r   r   rË   r
   r‚   Úboolr	   r   r   r   r   )rx   rH   r§   r“   r`   r¨   rj   r©   rª   r«   r7   r¬   rb   r  r²   r*   rA   ) r¬   r¨   rè   rª   ré   rj   rê   r“   rë   rì   rí   r«   rx   rµ   r»   rî   rï   rð   rñ   r©   rò   ró   rô   rõ   rö   r÷   rH   rø   rù   rú   r7   rû   rB   r)   )  s„   +
ÿþ



üÿþýüüüÿþ
ýüJü Fr)   c              
   K   s�   |si n|}z| j du rt| j| fi |¤Ž| _ |   ||||¡W S  tyG } zt| |||||ƒ tt| |ƒtt|ƒddƒW  Y d}~S d}~ww )zTrace task execution.Ng        )	Ú	__trace__r)   rx   rË   rÛ   r7   rÜ   r(   rg   )rH   r¶   r~   rp   rY   ÚoptsrU   rA   rA   rB   r*   \  s   
&€þr*   c           	   
   C   sV   z(t  ¡ \}}}tƒ }t|jƒ|_t|jƒ|_tjj	| |||||||d� W ~dS ~w )zJSend a special `internal_error` signal to the app for outside body errors.)ru   rˆ   r~   rp   rY   r‰   r2   rT   N)
ry   rz   r   r&   r‰   r%   r‹   r   Útask_internal_errorr€   )	rH   r¶   r~   rp   rY   rU   r„   r…   rT   rA   rA   rB   rÛ   h  s    ø
rÛ   c                 K   s¢   |pt  ¡ }d }	|rt|jjƒ}
|||||
d�\}}}	n|\}}}	tƒ }|j|||ddœfi |	p1i ¤Ž t|j|  |||||d�\}}}}|rLd||fS d||fS )N©ÚacceptF©r~   rp   r“   Úis_eagerr¹   r5   r   )	r   Ú_get_current_objectr   rý   Úaccept_contentr"   Úupdater*   Útasks)rx   r¶   rY   ÚbodyÚcontent_typeÚcontent_encodingr   rª   Úextra_requestÚembedr  r~   rp   r“   r´   r³   rÝ   rÞ   rA   rA   rB   Útrace_task_ret}  s&   ÿ
þý

ÿr#  c	                 K   s”   |st n|}d }
|\}}}|r|||||d�\}}}
n|\}}}
|j|||ddœfi |
p-i ¤Ž ||   ||||¡\}}}}|rEd||fS d||fS )Nr  Fr  r5   r   )Ú
_localizedr  r  )rH   r¶   rY   r  r  r   r   Ú_locr“   r„   r"  r  r  r~   rp   r´   r³   rÝ   rÞ   rA   rA   rB   Úfast_trace_task“  s$   
ÿ
þýÿr&  c                 C   sR   t  ¡ \}}}z| j |d¡}t|||fdd�}ttd ||j¡ƒƒ |W ~S ~w )NÚpickleTr¼   z'Exception raised outside body: {!r}:
{})	ry   rz   r{   Úprepare_exceptionr   r   ÚRuntimeWarningr/   r2   )rH   rU   Ú_typeÚ_valueÚ_tbrz   rA   rA   rB   rÜ   ©  s   ÿÿrÜ   c                 C   sN   |pt ƒ }tƒ  |  ¡  |  ¡  |  ¡  | jt| jjƒ|gt	dd…< d| _
dS )z#Setup worker related optimizations.NT)r"   Ú_install_stack_protectionÚset_currentÚset_defaultÚfinalizeÚ_tasksr   rý   r  r$  Úuse_fast_trace_task)rª   r“   rA   rA   rB   r+   ¶  s   

ý
r+   c                 C   sP   zt tdƒ W n	 ty   Y nw zt d¡t_W n	 ty"   Y nw d| _dS )z*Reset previously configured optimizations.Ú_stackprotectedúBaseTask.__call__FN)ÚdelattrrF   rÃ   Ú_patchedrÑ   r®   ÚKeyErrorr2  r¹   rA   rA   rB   r,   Ô  s   ÿÿ
r,   c                     s:   t tddƒstj td< ‰ ‡ fdd„} | t_dt_d S d S )Nr3  Fr4  c                    sT   | j }|j}|r|jst|ƒdkr|jsd|_| j|i |¤ŽS ˆ | g|¢R i |¤ŽS )Nr5   )r  ÚtopÚ
_protectedrÎ   r·   rü   )r^   r~   rp   Ústackri   ©ÚorigrA   rB   Ú__protected_call__ò  s   
z5_install_stack_protection.<locals>.__protected_call__T)rX   rF   r®   r6  r3  )r=  rA   r;  rB   r-  á  s   
ôr-  rK   )�rž   r
  r  ry   ÚtimeÚcollectionsr   Útypingr   r   r   r   r   r   r	   r
   r   Úwarningsr   Úbilliard.einfor   r   Úkombu.exceptionsr   Úkombu.serializationr   Úloads_messager   Úkombu.utils.encodingr   r   r  Úcelery.loaders.appr   r   r   r   Úcelery._stater   Úcelery.app.taskr   r   rF   Úcelery.exceptionsr   r   r   r   r   Úcelery.resultr    Úcelery.utils.logr!   Úcelery.utils.nodenamesr"   Úcelery.utils.objectsr#   Úcelery.utils.safereprr$   Úcelery.utils.serializationr%   r&   r'   Ú__all__Úcelery.worker.stater-   r›   r>   ÚLOG_RECEIVEDrÔ   ÚLOG_FAILUREÚLOG_INTERNAL_ERRORrÆ   ÚLOG_REJECTEDr�   r.   ÚWARNrM   r  rN   ÚCRITICALrP   rR   ÚERRORrS   r  r€   rÇ   r  rÕ   r  rÓ   rÈ   rÅ   rÊ   rÉ   re   rg   ÚEXCEPTION_STATESÚ	frozensetr¬   r$  r6  r7   r9   rJ   rV   r[   r(   r¦   r«   r‚   ÚlocalÚPromiseProxyÚloadersrª   Ú	AppLoaderr  ÚCeleryÚintr)   r*   rÛ   r#  r&  rÜ   r+   r,   r-  rA   rA   rA   rB   Ú<module>   sò    ,þÿÿÿ

sôÿþýüûúùø	÷

öõô"
ó  
5
ÿ
þ
