o
    Dfk                  
   @   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 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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$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/ ddl0m1Z1m2Z2m3Z3 dZ4ddl5m6Z6 e)e7Z8dZ9dZ:dZ;dZ<dZ=dZ>dZ?eddZ@e@e>dejAd d ZBe@e=d!ejCddZDe@e<d"ejEd d ZFe@e;d#ejCddZGe@e;d$ejHd d ZIejJjKZLejMjKZNejOjKZPejQZQejRZRejSZSejTZTejUZUejVZVejWZWeXeSeUeThZYg ZZi Z[ed%d&Z\d'd( Z]d)d* Z^d+d, Z_d-d. Z`G d/d0 d0ZadGd1d2Zbddd3ead4d4dejce\eYf
d5d6ZddGd7d8Zed9d: Zfedfd;d<Zgeddfd=d>Zhd?d@ ZidGdAdBZjefdCdDZkdEdF ZldS )HzTrace task execution.

This module defines how the task execution is traced:
errors are recorded, handlers are applied and so on.
    N)
namedtuple)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)loggerr0   )fmtcontext r8   I/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/app/trace.pyr0   {   s   r0   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attrr8   r8   r9   task_has_custom   s   rA   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)r?   einfoexcr8   r8   r9   get_log_policy   s   

rM   c                 C   s   t | ddp|S )z8Use 'shadow' in request for the task name if applicable.shadowN)getattr)requestdefaultr8   r8   r9   get_task_name   s   rR   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.stater/   Nc                 C   s   || _ || _d S rB   rS   )selfrT   r/   r8   r8   r9   __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_failurerT   )rU   r?   reqeagerrX   rW   r8   r8   r9   handle_error_state   s   
zTraceInfo.handle_error_statec                 K      |  ||t  d S rB   
_log_errorr   rU   r?   r`   kwargsr8   r8   r9   handle_reject      zTraceInfo.handle_rejectc                 K   rc   rB   rd   rf   r8   r8   r9   handle_ignore   ri   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.rP   )senderrP   reasonrK   )idnamerL   )sysexc_infor/   r   backendmark_as_retryrn   rL   r)   on_retryargsrg   r   
task_retrysendr0   	LOG_RETRYrR   ro   str)
rU   r?   r`   rW   rg   type__tbrm   rK   r8   r8   r9   r]      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rq   )rP   store_resultrX   )rl   task_id	exceptionru   rg   r)   rK   )r/   r   __traceback__rp   rq   r   typer   rr   mark_as_failurern   r)   
on_failureru   rg   r   task_failurerw   re   )
rU   r?   r`   rW   rX   orig_excrL   r{   exc_typerK   r8   r8   r9   r_      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)	hostnamern   ro   rL   r)   ru   rg   r'   rF   r3   )rq   r4   )r   r   rC   r   rL   r	   r
   r)   rq   getru   rg   rM   r   rn   rR   ro   r'   rF   r5   logr(   r&   strip)rU   r?   r`   rK   eobjr   r)   rq   sargsskwargspolicyr7   r8   r8   r9   re      s0   


zTraceInfo._log_errorrB   )FT)T)TT)__name__
__module____qualname____doc__	__slots__rV   rb   rh   rj   r]   r_   re   r8   r8   r8   r9   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   rp   rq   tb_frameclearf_localsRuntimeErrortb_next)rL   r|   r{   r8   r8   r9   traceback_clear  s   

r   TFc                     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fd	d
	d 	
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   )canvasc                    s2   r  ||}|j | |d}|||j|jfS )N)ra   rX   )rb   rT   r/   )rP   rL   rT   rX   IR)Infora   	propagater?   r8   r9   on_errory  s   
zbuild_tracer.<locals>.on_errorc                    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rt| ||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 }~nd }~w t ym    w zj!j"}|rt#j!j"dkrg g }}|D ]}|d}t$|t%r|&| q|&| q|D ]}|j'|f| ||d q|rt%|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     sz
j1  	  W n t2t3t4fy     ty } zt5j6d|dd W Y d }~nd }~ww n    sz
j1  	  W w  t2t3t4fy     ty } zt5j6d|dd W Y d }~w d }~ww w zJrt0| ||||	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 )Nz'Task keyword arguments is not a mappingF)ru   called_directlyrg   redeliveredappz$Task already completed successfully.)rn   ro   r'   priority)rl   r   r?   ru   rg   )pidr   rk   TrF   )rX   r,   )	parent_idroot_idr   r   )chainr   r   r   )rl   resultr   r   )rn   ro   return_valuer1   ru   rg   )rl   r   r?   ru   rg   r/   rT   zProcess cleanup failed: %rr}   )9itemsAttributeErrorr   r   delivery_infor   rn   r$   r   rT   r   SUCCESSr0   LOG_IGNOREDrR   r   send_prerunrr   r~   STARTEDr   REJECTEDr   r/   rh   r   r   IGNOREDrj   r   r\   	ExceptionBaseExceptionrP   	callbackslenrC   r   appendapply_asyncr   popmark_as_doner   r   send_successLOG_SUCCESSr	   send_postrunprocess_cleanupKeyboardInterrupt
SystemExitMemoryErrorr5   error_signal_internal_errorreport_internal_error)uuidru   rg   rP   r   r   TRstrr/   rT   task_request
time_startr   rr   task_priorityrL   r   sigsgroupssiggroup_r   _chsigr{   )IGNORE_STATESr   
_does_infor   deduplicate_successful_tasksra   funr   inherit_parent_priorityloader_cleanuploader_task_init	monotonicro   r   r   pop_requestpop_taskpostrun_receiversprerun_receiverspublish_resultpush_request	push_taskresultrepr_maxsize	signaturesuccess_receiversr?   task_after_returntask_before_starttask_on_successr.   track_startedr8   r9   r!     s  



















	

z build_tracer.<locals>.trace_taskrB   )'rA   runloaderrY   r   r[   conftask_acks_late	acks_late#worker_deduplicate_successful_tasksrr   
persistentr   task_inherit_parent_priorityon_task_initon_process_cleanupr   r   r   osgetpidrequest_stackpushr   r   r5   isEnabledForloggingINFOr   r   task_prerun	receiverstask_postruntask_successceleryr   maybe_signaturer^   )ro   r?   r   r   rW   r   ra   r   r   r   r.   r   rY   r   r   r!   r8   ) r   r   r   r   r   ra   r   r   r   r   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   r   r.   r   r9   r    &  sV   !




J	 @r    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    ro   r   r   r.   r   r   r^   )r?   r   ru   rg   rP   optsrL   r8   r8   r9   r!   D  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.)rl   r   ru   rg   rP   r   r)   rK   N)
rp   rq   r   r   r   r   r   r   task_internal_errorrw   )	r?   r   ru   rg   rP   rL   r{   r|   rK   r8   r8   r9   r   P  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ru   rg   r   is_eagerr   r,   r   )	r   _get_current_objectr   r   accept_contentr   updater!   tasks)ro   r   rP   bodycontent_typecontent_encodingr   r   extra_requestembedr  ru   rg   r   r   r   r   r   r8   r8   r9   trace_task_rete  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  r,   r   )
_localizedr  r  )r?   r   rP   r  r  r  r   _locr   r{   r  r  r  ru   rg   r   r   r   r   r8   r8   r9   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}:
{})	rp   rq   rr   prepare_exceptionr   r   RuntimeWarningr&   r)   )r?   rL   _type_value_tbrq   r8   r8   r9   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   r8   r8   r9   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)delattrr=   r   _patchedr   r   KeyErrorr'  r   r8   r8   r9   r#     s   
r#   c                     s:   t tddstj td<   fdd} | t_dt_d S d S )Nr(  Fr)  c                    sT   | j }|j}|r|jst|dkr|jsd|_| j|i |S  | g|R i |S )Nr,   )r   top
_protectedr   r   r   )rU   ru   rg   stackr`   origr8   r9   __protected_call__  s   
z5_install_stack_protection.<locals>.__protected_call__T)rO   r=   r   r+  r(  )r2  r8   r0  r9   r"    s   
r"  rB   )mr   r   r   rp   timecollectionsr   warningsr   billiard.einfor   r   kombu.exceptionsr   kombu.serializationr   loads_messager   kombu.utils.encodingr	   r
   r  r   r   r   r   celery._stater   celery.app.taskr   r   r=   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   r5   LOG_RECEIVEDr   LOG_FAILURELOG_INTERNAL_ERRORr   LOG_REJECTEDrx   r%   WARNrD   r  rE   CRITICALrG   rI   ERRORrJ   r  rw   r   r  r   r  r   r   r   r   r   r\   r^   EXCEPTION_STATES	frozensetr   r  r+  r.   r0   rA   rM   rR   r   r   r   r    r!   r   r  r  r   r"   r#   r"  r8   r8   r8   r9   <module>   s    

s
  
 


