
    ghI                     ^   S SK r S SKJr  S SKJr  S SKrS SKJr  S SKJr  S SK	J
r
JrJr  S SKJrJrJr  S SKJrJrJr  S S	KJr  S S
KJr  S SKJrJr  S SKJr  S SKJrJ r J!r!J"r"  S SK#J$r$  \$(       aB  S SK#J%r%  S SK#J&r&  S SK#J'r'  S SK#J(r(  S SK#J)r)  S SK#J*r*  S SK+J,r,J-r-J.r.J/r/  S SKJ0r0  \)" S\&S\%4   S9r1 S SK2J3r4  S SK5J6r6  S SK7J8r8  S SK9J:r:J;r;J<r<J=r=  S SK>J?r?  \<\:\;4rA " S  S!\5      rBS" rCS# rDS1S$ jrES% rF " S& S'5      rGS( rHS) rIS* rJS+ rKS, rLS- rMS. rNS/ rOS0 rPg! \@ a	    \" S5      ef = f)2    N)Mappingwraps)isolation_scope)continue_trace)OP
SPANSTATUSSPANDATA)_check_minimum_versionIntegrationDidNotEnable)_patch_beat_apply_entry_patch_redbeat_apply_async_setup_celery_beat_signals)_now_seconds_since_epoch)ignore_logger)BAGGAGE_HEADER_NAMETransactionSource)Baggage)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionreraise)TYPE_CHECKING)Any)Callable)List)Optional)TypeVar)Union)EventProcessorEventHintExcInfo)SpanF.)bound)VERSION)Task)task_has_custom)IgnoreRejectRetrySoftTimeLimitExceeded)ProducerzCelery not installedc                   B    \ rS rSrSrS\ 3r   SS jr\S 5       rSr	g)	CeleryIntegration<   celeryzauto.queue.Nc                 f    Xl         X l        X0l        [        5         [	        5         [        U5        g N)propagate_tracesmonitor_beat_tasksexclude_beat_tasksr   r   r   )selfr6   r7   r8   s       j/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/celery/__init__.py__init__CeleryIntegration.__init__@   s+     !1"4"4!"$"#56    c                      [        [        [        5        [        5         [	        5         [        5         [        5         [        5         [        S5        [        S5        [        S5        g )Nzcelery.worker.jobzcelery.app.tracezcelery.redirected)	r   r1   CELERY_VERSION_patch_build_tracer_patch_task_apply_async_patch_celery_send_task_patch_worker_exit_patch_producer_publishr    r=   r:   
setup_onceCeleryIntegration.setup_onceO   sL     	0.A!!!
 	)*() 	)*r=   )r8   r7   r6   )TFN)
__name__
__module____qualname____firstlineno__
identifieroriginr;   staticmethodrF   __static_attributes__rE   r=   r:   r1   r1   <   s7    J:,'F  	7 + +r=   r1   c                     [        5          [        R                  " 5       nUR                  b  UR                  R	                  U 5        S S S 5        g ! , (       d  f       g = fr5   )r   
sentry_sdkget_current_scopespan
set_status)statusscopes     r:   _set_statusrW   e   s>    	$	&,,.::!JJ!!&) 
'	&	&s   >A
A c                 v   [         R                  " 5       nUR                  [        5      c  g [	        US   [
        5      (       a  [        S5        g [        S5        [        U S5      (       a  [	        US   U R                  5      (       a  g [        UUR                  SSS.S9u  p4[         R                  " X4S	9  g )
N   abortedinternal_errorthrowsr3   F)typehandled)client_options	mechanism)hint)rQ   
get_clientget_integrationr1   
isinstanceCELERY_CONTROL_FLOW_EXCEPTIONSrW   hasattrr\   r   optionscapture_event)taskexc_infoclienteventra   s        r:   _capture_exceptionrm   m   s    ""$F/08(1+=>>I !tX:hqk4;;#G#G&~~#6KE U.r=   c                     ^ ^^^ UUU U4S jnU$ )Nc                 ~  > [        5          U R                  S0 5      nTUS'   U R                  S0 5      nTR                  TTS.US'   S S S 5        SU;   aC  [        5          [        US   S   [        5      (       a  SS	[        TS
T5      /U S'   S S S 5        U $ U $ ! , (       d  f       NY= f! , (       d  f       U $ = f)Ntagscelery_task_idextra)	task_nameargskwargsz
celery-jobrj   r   r3   r.   namefingerprint)r   
setdefaultrv   
issubclassr.   getattr)rl   ra   rp   rr   rt   ru   ri   uuids       r:   event_processor._make_event_processor.<locals>.event_processor   s     )*##FB/D%)D!"$$Wb1E!YY #E,	 + ,.d:.q13HII /fd3,E-( / u' +* /. s   =B!/B-
B*-
B<rE   )ri   r{   rt   ru   requestr|   s   ````  r:   _make_event_processorr      s     0 r=   c                 P   U R                  5       n[        5          [        [        R                  " 5       R                  US95      nU(       a  UR                  SS[        5       -  05        UR                  S[        5       05        U(       Gax  UR                  [        5      nUR                  [        5      nU=(       d    UnU(       a  U(       a  [        R                  " U5      n[        R                  " U5      n	U	R                  R                  UR                  5        SR                  U	R                  UR                  4 V
s/ s H  n
U
c  M  U
S:w  d  M  U
PM     sn
5      U	l        U	R                  SS	9nUR                  U5        U(       a  Xs[        '   UR!                  S
0 5      R                  U5        U(       a  XsS
   [        '   UR#                  5        H$  u  pUR%                  S5      (       d  M  XS
   U'   M&     SSS5        U$ s  sn
f ! , (       d  f       U$ = f)z
Updates the headers of the Celery task with the tracing information
and eventually Sentry Crons monitoring information for beat tasks.
)rS   z sentry-monitor-start-timestamp-sz%.9fsentry-task-enqueued-time,N T)include_third_partyheaderszsentry-)copyr   dictrQ   get_isolation_scopeiter_trace_propagation_headersupdater   getr   r   from_incoming_headersentry_itemsjointhird_party_items	serializerx   items
startswith)original_headersrS   r7   updated_headersr   existing_baggagesentry_baggagecombined_baggageincomingcombinedxkeyvalues                r:   _update_celery_task_headersr      s    '++-O	$	& **,KKQUKV
 NN6.091 	(*B*DE	
 .223FG$[[)<=N-A1A"2 #778HI"77G%%,,X-B-BC-0XX %66$66""A  
 ./"W "	.* $,#5#5$#5#O ""7+7G 34 &&y"5<<WEBR	*+>? .335
>>),,6;I.s3 6y 
'@ =E 
'	&@ s1   D-HH
H
H
!BH<HH
H%c                        \ rS rSrS rS rSrg)NoOpMgr   c                     g r5   rE   )r9   s    r:   	__enter__NoOpMgr.__enter__       r=   c                     g r5   rE   )r9   exc_type	exc_value	tracebacks       r:   __exit__NoOpMgr.__exit__   r   r=   rE   N)rH   rI   rJ   rK   r   r   rO   rE   r=   r:   r   r      s    r=   r   c                 0   ^  [        T 5      U 4S j5       nU$ )Nc                    > [         R                  " 5       R                  [        5      nUc  T	" U 0 UD6$ UR	                  S5      =(       d    0 nUR                  SUR                  5      nU(       d  T	" U 0 UD6$ [        U S   [        5      (       a  U S   R                  nO/[        U 5      S:  a  [        U S   [        5      (       a  U S   nOSn[         R                  " 5       R                  S:H  nU(       d2  [         R                  " [        R                   U[        R"                  S9O	[%        5       nU n['        X8UR(                  5      US'   T	" U 0 UD6sS S S 5        $ ! , (       d  f       g = f)Nr   zsentry-propagate-tracesr   rY   z<unknown Celery task>zcelery-beatoprv   rM   )rQ   rb   rc   r1   r   popr6   rd   r)   rv   lenstrr   _name
start_spanr   QUEUE_SUBMIT_CELERYrM   r   r   r7   )
rt   ru   integrationkwarg_headersr6   rs   task_started_from_beatspan_mgrrS   fs
            r:   apply_async#_wrap_task_run.<locals>.apply_async   sJ   
 !++-==>OPd%f%%

9-3(,,%{'C'C
  d%f%%d1gt$$QIY]z$q'377QI/I!+!?!?!A!G!G=!X * !!))(//  	  ;[%C%C!F9 d%f%	 XXs   8!E##
E1r   )r   r   s   ` r:   _wrap_task_runr      s"    
1X'& '&R r=   c                 Z   ^ ^ [        T5      [        [        T5      UU 4S j5       5       nU$ )Nc            
        > [        5        nSUl        UR                  5         UR                  [	        T/U Q70 UD65        S n[        5          U S   R                  S5      =(       d    0 n[        U[        R                  S[        R                  [        R                  S9nTR                  Ul        UR                  [         R"                  5        S S S 5        Uc  T" U 0 UD6sS S S 5        $ [$        R&                  " USTR                  [)        U S   5      U S   S	.0S
9   T" U 0 UD6sS S S 5        sS S S 5        $ ! , (       d  f       Nq= f! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nr3      r   zunknown celery task)r   rv   sourcerM   
celery_jobrY      )ri   rt   ru   )custom_sampling_context)r   r   clear_breadcrumbsadd_event_processorr   r   r   r   r   QUEUE_TASK_CELERYr   TASKr1   rM   rv   rT   r	   OKrQ   start_transactionlist)rt   ru   rV   transactionr   r   ri   s        r:   _inner_wrap_tracer.<locals>._inner/  sP    %"EK##%%%&;D&R4&R6&RSK -.q'++i06B,++.,11,33 $(99 &&z}}5 / "$)&)- 0 --  $		 !%T!W"&q'#) $)&) 1  /.  1 sC   AE*BD>E*/4E*#E+	E*>
E	E*
E	E**
E8)r   r   r1   ri   r   r   s   `` r:   _wrap_tracerr   &  s3     1X 115&* 6 &*P Mr=   c                    [        5          U R                  R                  nU(       aI  UR                  S5      nUR                  S5      S:X  a#  Ub   UR	                  [
        R                  U5        SSS5        g! , (       d  f       g= f)z-Set "messaging.destination.name" tag for spanrouting_keyexchanger   N)r   r~   delivery_infor   set_datar
   MESSAGING_DESTINATION_NAME)ri   rS   r   r   s       r:   _set_messaging_destination_namer   \  sf     
%	&22'++M:K  ,2{7N hAA;O 
'	&	&s   A'A;;
B	c                 >   ^ ^ [        [        T5      UU 4S j5       nU$ )Nc                  8  >  [         R                  " [        R                  TR                  [
        R                  S9 n[        TU5        S n[        5          TR                  R                  bJ  STR                  R                  ;   a0  [        5       TR                  R                  R                  S5      -
  nS S S 5        Ub%  US-  nUR                  [        R                  U5        [        5          UR                  [        R                   TR                  R"                  5        S S S 5        [        5          UR                  [        R$                  TR                  R&                  5        S S S 5        [        5          UR                  [        R(                  TR*                  R-                  5       R.                  R0                  5        S S S 5        T" U 0 UD6sS S S 5        $ ! , (       d  f       GN5= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NS= f! , (       d  f       g = f! [2         aQ    [4        R6                  " 5       n[        5          [9        TU5        S S S 5        O! , (       d  f       O= f[;        U6    g f = f)Nr   r   i  )rQ   r   r   QUEUE_PROCESSrv   r1   rM   r   r   r~   r   r   r   r   r
   !MESSAGING_MESSAGE_RECEIVE_LATENCYMESSAGING_MESSAGE_IDidMESSAGING_MESSAGE_RETRY_COUNTretriesMESSAGING_SYSTEMapp
connection	transportdriver_type	Exceptionsysrj   rm   r   )rt   ru   rS   latencyrj   r   ri   s        r:   r   _wrap_task_call.<locals>._innert  s   )	&&##YY(// /d;02,,874<<;O;OO":"<t||?S?S?W?W7@ # 3 &tOGMM("L"LgV02MM("?"?Q 3 12MM >>@T@T 3
 12MM 11++-77CC 3 $)&)G  32 32 32
 32; H  	||~H,."42 /..X		s   <H> H-A"G(::H-45G:)H-;5H0H-AHH-	H> (
G7	2H-:
H	H-
H	H-
H*	&H--
H;7H> ;H> >)J'I=4	J=
J	JJ)r   r1   r   s   `` r:   _wrap_task_callr   i  s'       115+ 6+Z Mr=   c                  H   ^ SS K Js  Jn   U R                  mU4S jnXl        g )Nr   c                   > [        USS5      (       d`  [        US5      (       a.  [        U[        U5      R                  5      [        U5      l        O[        XR
                  5      Ul        SUl        [        UT" X/UQ70 UD65      $ )N_sentry_is_patchedF__call__T)rz   r*   r   r]   r   runr   r   )rv   ri   rt   ru   original_build_tracers       r:   sentry_build_tracer0_patch_build_tracer.<locals>.sentry_build_tracer  sv    t1599 tZ00&5dDJ<O<O&PT
#*4:
 '+D#D"7"TT"TV"TUUr=   )celery.app.tracer   tracebuild_tracer)r   r   r   s     @r:   r@   r@     s#    $$!..V" -r=   c                  H    [        [        R                  5      [        l        g r5   )r   r)   r   rE   r=   r:   rA   rA     s    %d&6&67Dr=   c                  D    SSK Jn   [        U R                  5      U l        g )Nr   Celery)r3   r   r   	send_taskr   s    r:   rB   rB     s    %f&6&67Fr=   c                  B   ^ SSK Jn   U R                  mU4S jnXl        g )Nr   )Workerc                    >  T" U 0 UD6[        5          [        R                  " 5       R                  [        5       b  [        R
                  " 5         S S S 5        $ ! , (       d  f       $ = f! [        5          [        R                  " 5       R                  [        5       b  [        R
                  " 5         S S S 5        f ! , (       d  f       f = f= fr5   )r   rQ   rb   rc   r1   flush)rt   ru   original_workloops     r:   sentry_workloop+_patch_worker_exit.<locals>.sentry_workloop  s    	'$d5f5,.))+;;<MN  $$& /..,.))+;;<MN  $$& /..s0   A. A A
A+	.C9A C9	C
CC)billiard.poolr   workloop)r   r   r   s     @r:   rC   rC     s    
 %
' &Or=   c                  n   ^ [         R                  m[        [        T5      U4S j5       n U [         l        g )Nc                 T  > UR                  S0 5      n[        U[        5      (       d  0 nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      n[        R                  " [
        R                  U[        R                  S9 n	Ub   U	R                  [        R                  U5        US:X  a#  Ub   U	R                  [        R                  U5        Ub   U	R                  [        R                  U5        [        5          U	R                  [        R                  U R                   R"                  R$                  5        S S S 5        T
" U /UQ70 UD6sS S S 5        $ ! , (       d  f       N#= f! , (       d  f       g = f)	Nr   ri   r   r   r   r   r   r   )r   rd   r   rQ   r   r   QUEUE_PUBLISHr1   rM   r   r
   r   r   r   r   r   r   r   r   )r9   rt   ru   kwargs_headersrs   task_idr   r   r   rS   original_publishs             r:   sentry_publish/_patch_producer_publish.<locals>.sentry_publish  sW     Ir2.'22  N"&&v.	 $$T* $$Y/jj/::j)""$++
 "h;;WE2~+"9 hAA;O"hDDgN,.--t/H/H/T/T /
 $D:4:6:+
 
  /.!
 
s%   2A:F,?F+F
F	F
F')r/   publishr   r1   )r  r  s    @r:   rD   rD     s6    '' 13CD'; E';R &Hr=   r5   )Qr   collections.abcr   	functoolsr   rQ   r   sentry_sdk.apir   sentry_sdk.constsr   r	   r
   sentry_sdk.integrationsr   r   r   #sentry_sdk.integrations.celery.beatr   r   r   $sentry_sdk.integrations.celery.utilsr   sentry_sdk.integrations.loggingr   sentry_sdk.tracingr   r   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   r   typingr   r   r   r   r   r   r    sentry_sdk._typesr!   r"   r#   r$   r%   r&   r3   r(   r?   celery.app.taskr)   r   r*   celery.exceptionsr+   r,   r-   r.   kombur/   ImportErrorre   r1   rW   rm   r   r   r   r   r   r   r   r@   rA   rB   rC   rD   rE   r=   r:   <module>r     s&   
 #   & ) 6 6 U U 
 J 9 E ,  !FF'8CH-.A/0$0  
 #(!8 &+ &+R*/2:GT ,^3l
P9x-48
8&0.&]  /
-
../s   5$D D,