
    gh                        S SK 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  S SKJr  S SKJrJr  S SKJr  S S	KJr  \(       a  S S
KJrJrJrJrJr  S SKJrJr   " S S\5      rS r " S S\5      rS r  " S S5      r!g)    N)Integration)request_body_within_bounds)AnnotatedValuecapture_internal_exceptionsevent_from_exception)Broker)Message)
Middlewaredefault_middleware)Retry)TYPE_CHECKING)AnyCallableDictOptionalUnion)EventHintc                   ,    \ rS rSrSrSr\S 5       rSrg)DramatiqIntegration   a#  
Dramatiq integration for Sentry

Please make sure that you call `sentry_sdk.init` *before* initializing
your broker, as it monkey patches `Broker.__init__`.

This integration was originally developed and maintained
by https://github.com/jacobsvante and later donated to the Sentry
project.
dramatiqc                      [        5         g N)_patch_dramatiq_broker     c/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/dramatiq.py
setup_onceDramatiqIntegration.setup_once&   s
     	 r   r   N)	__name__
__module____qualname____firstlineno____doc__
identifierstaticmethodr   __static_attributes__r   r   r   r   r      s     	 J! !r   r   c                  H   ^ [         R                  mU4S jn U [         l        g )Nc                   > [         R                  " 5       R                  [        5      n UR	                  S5      nUc  [        S [         5       5      nO[        U5      nUbC  U Vs/ s H  n[        U[        5      (       a  M  UPM     nnUR                  S[        5       5        XBS'   T" U /UQ70 UD6  g ! [
         a    [        U5      S:X  a	  US   n/ n NS n Nf = fs  snf )N
middleware   r   c              3   .   #    U  H  o" 5       v   M     g 7fr   r   ).0ms     r   	<genexpr>P_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__.<locals>.<genexpr>A   s     >+=aacc+=s   )
sentry_sdk
get_clientget_integrationr   popKeyErrorlenlistr   
isinstanceSentryMiddlewareinsert)selfargskwintegrationr+   r/   original_broker__init__s         r   sentry_patched_broker__init__=_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__0   s     ++-==>QR
	"-J >+=>>Jj)J"%/WZz!EU7V!ZJWa!1!34%<2t2r2)  	" 4yA~!!W
!
	"  Xs#   B8 (C"C"8 CCC)r   __init__)rA   r@   s    @r   r   r   ,   s    $oo38 4FOr   c                   .    \ rS rSrSrS rSSS.S jrSrg)r:   O   z
A Dramatiq middleware that automatically captures and sends
exceptions to Sentry.

This is automatically added to every instantiated broker via the
DramatiqIntegration.
c                    [         R                  " 5       R                  [        5      nUc  g [         R                  " 5       Ul        UR
                  R                  5         [         R                  " 5       nUR                  UR                  5        UR                  SUR                  5        UR                  [        X#5      5        g )Ndramatiq_message_id)r2   r3   r4   r   	new_scope_scope_manager	__enter__get_current_scopeset_transaction_name
actor_name	set_extra
message_idadd_event_processor_make_message_event_processor)r<   brokermessager?   scopes        r   before_process_message'SentryMiddleware.before_process_messageX   s     ++-==>QR!+!5!5!7((*,,.""7#5#56-w/A/AB!!"?"UVr   N)result	exceptionc                   [         R                  " 5       R                  [        5      nUc  g UR	                  UR
                  5      nUR                  R                  S5      =(       d    UR                  R                  S5      n Ub{  U(       a  [        XG5      (       dd  [        U[        5      (       dO  [        U[         R                  " 5       R                  [        R                  SS.S9u  p[         R                  " XS9  UR                  R                  S S S 5        g ! UR                  R                  S S S 5        f = f)NthrowsF)typehandled)client_options	mechanism)hint)r2   r3   r4   r   	get_actorrM   optionsgetr9   r   r   r&   capture_eventrI   __exit__)
r<   rR   rS   rW   rX   r?   actorrZ   eventr_   s
             r   after_process_message&SentryMiddleware.after_process_messagef   s     ++-==>QR  !3!34$$X.M%--2C2CH2M	>%Jy$A$A"9e442#-#8#8#:#B#B 3 > >#( ((:""++D$=G""++D$=s   A>D" "Er   )r!   r"   r#   r$   r%   rU   rg   r(   r   r   r   r:   r:   O   s     W @Dt > >r   r:   c                    ^  U 4S jnU$ )Nc                    > [        5          [        T5      R                  U 5        S S S 5        U $ ! , (       d  f       U $ = fr   )r   DramatiqMessageExtractorextract_into_event)rf   r_   rS   s     r   inner,_make_message_event_processor.<locals>.inner   s8    (*$W-@@G +  +* s	   1
A r   )rS   r?   rm   s   `  r   rQ   rQ      s     Lr   c                   &    \ rS rSrS rS rS rSrg)rk      c                 @    [        UR                  5       5      U l        g r   )dictasdictmessage_data)r<   rS   s     r   rC   !DramatiqMessageExtractor.__init__   s     !12r   c                 T    [        [        R                  " U R                  5      5      $ r   )r7   jsondumpsrt   )r<   s    r   content_length'DramatiqMessageExtractor.content_length   s    4::d//011r   c                 8   [         R                  " 5       nUR                  5       (       d  g UR                  S0 5      nUR                  S0 5      nSUS'   S n[	        X R                  5       5      (       d  [        R                  " 5       nOU R                  nXTS'   g )Ncontextsr   r[   data)	r2   r3   	is_active
setdefaultr   ry   r   removed_because_over_size_limitrt   )r<   rf   clientr|   request_infor}   s         r   rl   +DramatiqMessageExtractor.extract_into_event   s    &&(!!##J3**:r:)V)&2E2E2GHH!AACD$$D#Vr   )rt   N)r!   r"   r#   r$   rC   ry   rl   r(   r   r   r   rk   rk      s    32$r   rk   )"rw   r2   sentry_sdk.integrationsr   $sentry_sdk.integrations._wsgi_commonr   sentry_sdk.utilsr   r   r   dramatiq.brokerr   dramatiq.messager	   dramatiq.middlewarer
   r   dramatiq.errorsr   typingr   r   r   r   r   r   sentry_sdk._typesr   r   r   r   r:   rQ   rk   r   r   r   <module>r      sf      / K  # $ > !  ;;-!+ !( 4F0>z 0>f
$ $r   