
    tni                        d dl Z d dlZd dlmZmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZ  ed	          Z	 d d
lmZ d dlmZmZ d dlmZ d dl m!Z! n# e"$ r  ed          w xY wd dlm#Z# e#rd dlm$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+  G d de
          Z,ddZ- G d de          Z.	 	 	 	 	 	 d dZ/ G d d          Z0dS )!    N)OP
SPANSTATUS)continue_traceget_baggageget_traceparent)IntegrationDidNotEnable)request_body_within_bounds)BAGGAGE_HEADER_NAMESENTRY_TRACE_HEADER_NAMETransactionSource)AnnotatedValuecapture_internal_exceptionsevent_from_exception)TypeVarR)Broker)
Middlewaredefault_middleware)Retry)MessagezDramatiq is not installed)TYPE_CHECKING)AnyCallableDictOptionalUnion)EventHintc                   8    e Zd ZdZdZde Zedd            ZdS )DramatiqIntegrationa?  
    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.
    dramatiqzauto.queue.returnNc                  "    t                       d S N)_patch_dramatiq_broker     ]/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/dramatiq.py
setup_oncezDramatiqIntegration.setup_once4   s         r(   r#   N)__name__
__module____qualname____doc__
identifieroriginstaticmethodr*   r'   r(   r)   r!   r!   %   sP        	 	 J':''F! ! ! \! ! !r(   r!   r#   c                  T    t           j        	 	 	 	 	 	 	 	 dfd} | t           _        d S )	Nselfr   argsr   kwr#   c                    t          j                                        t                    }	 |                    d          }n0# t
          $ r# t          |          dk    r|d         }g }nd }Y nw xY w|t          d t          D                       }nt          |          }|.d |D             }|	                    dt                                 ||d<    | g|R i | d S )N
middleware   r   c              3   *   K   | ]} |            V  d S r%   r'   .0ms     r)   	<genexpr>zP_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__.<locals>.<genexpr>N   s(      >>aaacc>>>>>>r(   c                 <    g | ]}t          |t                    |S r'   )
isinstanceSentryMiddlewarer;   s     r)   
<listcomp>zQ_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__.<locals>.<listcomp>S   s(    WWWz!EU7V7VW!WWWr(   )
sentry_sdk
get_clientget_integrationr!   popKeyErrorlenlistr   insertrA   )r4   r5   r6   integrationr8   original_broker__init__s        r)   sentry_patched_broker__init__z=_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__<   s    !+--==>QRR
	"--JJ 	" 	" 	" 4yyA~~!!W
!
	" >>+=>>>>>JJj))J"WWZWWWJa!1!3!3444%<2t222r22222s   A *A10A1)r4   r   r5   r   r6   r   r#   N)r   __init__)rM   rL   s    @r)   r&   r&   9   sV    $o33$3,13	3 3 3 3 3 3: 4FOOOr(   c                   X    e Zd ZdZdZdddddedd	fd
ZddZd	d	d	 	 	 	 	 	 	 	 	 ddZd	S )rA   z
    A Dramatiq middleware that automatically captures and sends
    exceptions to Sentry.

    This is automatically added to every instantiated broker via the
    DramatiqIntegration.
    _sentry_headersbrokerr   message
Message[R]delayr#   Nc                     t          j                                        t                    }|d S t          t                      t          t                      i|j        | j	        <   d S r%   )
rC   rD   rE   r!   r   r   r   r   optionsSENTRY_HEADERS_NAME)r4   rQ   rR   rT   rK   s        r)   before_enqueuezSentryMiddleware.before_enqueueg   sY     !+--==>QRRF  $o&7&75
0111r(   c                    t          j                                        t                    }|d S t          j                    |_        |j                                        }|                                 |                    d|j	                   |
                    t          ||                     |j                            | j                  pi }d|j        v ri }t          ||j        t"          j        t&          j        t          j                  }|                    t.          j                   t          j        ||j        t"          j        t&          j                   |                                 d S )Ndramatiq_message_idretries)nameopsourcer1   )r\   r]   r^   )rC   rD   rE   r!   isolation_scope_scope_manager	__enter__clear_breadcrumbs	set_extra
message_idadd_event_processor_make_message_event_processorrV   getrW   r   
actor_namer   QUEUE_TASK_DRAMATIQr   TASKr1   
set_statusr   OKstart_transaction)r4   rQ   rR   rK   scopesentry_headerstransactions          r)   before_process_messagez'SentryMiddleware.before_process_messages   sW    +--==>QRRF!+!;!=!=&0022!!!-w/ABBB!!"?"U"UVVV ,,T-EFFL"''N$#%$)&-
 
 
 	z}---$#%$)		
 	
 	
 	
 	r(   )result	exceptionrr   Optional[Any]rs   Optional[Exception]c                0   t          j                                        t                    }|d S |                    |j                  }|j                            d          p|j                            d          }|j        }t          j	                    j
        }	|	sd S |d uo(|ot          ||           ot          |t                     }
|
s0|	                    d d d            |                    d d d            d S t          |t          j                    j        t          j        dd          \  }}t          j        ||           |	                    t#          |          |d            |                    t#          |          |d            d S )NthrowsF)typehandled)client_options	mechanism)hint)rC   rD   rE   r!   	get_actorrh   rV   rg   r`   get_current_scoperp   r@   r   __exit__r   r0   capture_eventrx   )r4   rQ   rR   rr   rs   rK   actorrw   scope_managerrp   is_event_capture_requiredeventr|   s                r)   after_process_messagez&SentryMiddleware.after_process_message   s    !+--==>QRRF  !344$$X..M%-2C2CH2M2M. 244@ 	4 T! 1=
9f = =>1y%000 	"
 ) 	  tT222""4t444F*%022:+6  
 
 
t 	 T2222T)__i>>>tI	4@@@@@r(   )rQ   r   rR   rS   r#   N)
rQ   r   rR   rS   rr   rt   rs   ru   r#   N)	r,   r-   r.   r/   rW   intrX   rq   r   r'   r(   r)   rA   rA   \   s          ,



)5

>A

	

 

 

 

       J #'+/*A *A*A *A
  *A )*A 
*A *A *A *A *A *Ar(   rA   rR   rS   rK   (Callable[[Event, Hint], Optional[Event]]c                      d fd}|S )	Nr   r   r|   r   r#   Optional[Event]c                     t                      5  t                                        |            d d d            n# 1 swxY w Y   | S r%   )r   DramatiqMessageExtractorextract_into_event)r   r|   rR   s     r)   innerz,_make_message_event_processor.<locals>.inner   s    (** 	H 	H$W--@@GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H s   #?AA)r   r   r|   r   r#   r   r'   )rR   rK   r   s   `  r)   rf   rf      s(          Lr(   c                   *    e Zd Zd
dZdefdZdd	ZdS )r   rR   rS   r#   Nc                 R    t          |                                          | _        d S r%   )dictasdictmessage_data)r4   rR   s     r)   rN   z!DramatiqMessageExtractor.__init__   s"     !1!122r(   c                 N    t          t          j        | j                            S r%   )rH   jsondumpsr   )r4   s    r)   content_lengthz'DramatiqMessageExtractor.content_length   s    4:d/00111r(   r   r   c                 B   t          j                    }|                                sd S |                    di           }|                    di           }d|d<   d }t	          ||                                           st          j                    }n| j        }||d<   d S )Ncontextsr"   rx   data)	rC   rD   	is_active
setdefaultr
   r   r   removed_because_over_size_limitr   )r4   r   clientr   request_infor   s         r)   r   z+DramatiqMessageExtractor.extract_into_event   s    &((!! 	F##J33**:r::)VBF)&$2E2E2G2GHH 	%!ACCDD$D#Vr(   )rR   rS   r#   N)r   r   r#   N)r,   r-   r.   rN   r   r   r   r'   r(   r)   r   r      sW        3 3 3 32 2 2 2 2$ $ $ $ $ $r(   r   r+   )rR   rS   rK   r!   r#   r   )1r   rC   sentry_sdk.constsr   r   sentry_sdk.apir   r   r   sentry_sdk.integrationsr   r	   $sentry_sdk.integrations._wsgi_commonr
   sentry_sdk.tracingr   r   r   sentry_sdk.utilsr   r   r   typingr   r   dramatiq.brokerr   dramatiq.middlewarer   r   dramatiq.errorsr   dramatiq.messager   ImportErrorr   r   r   r   r   r   sentry_sdk._typesr   r   r!   r&   rA   rf   r   r'   r(   r)   <module>r      s        , , , , , , , , G G G G G G G G G G = = = = = = = = K K K K K K         
         
      GCLL4&&&&&&BBBBBBBB%%%%%%((((((( 4 4 4
,2
3
334 !           .;;;;;;;;;;;;;;--------! ! ! ! !+ ! ! !( 4  4  4  4FaA aA aA aA aAz aA aA aAH		(=	/	 	 	 	$ $ $ $ $ $ $ $ $ $s   A* *A;