§
    xÅj-"  ã                   óÊ  — d dl Z d dlmZ d dlZd dlmZ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 d dlmZmZmZ d d	lmZ d d
lmZmZmZmZ  ed¦  «        Z	 d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&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/m0Z0m1Z1  G d„ de¦  «        Z2d!d„Z3 G d„ de&¦  «        Z4	 	 	 	 	 	 d"d„Z5 G d„ d ¦  «        Z6dS )#é    N)ÚTypeVar)Úcontinue_traceÚget_baggageÚget_traceparent)ÚOPÚSPANDATAÚ
SPANSTATUS)ÚDidNotEnableÚIntegration)Úrequest_body_within_bounds)ÚSegmentNameSource)ÚBAGGAGE_HEADER_NAMEÚSENTRY_TRACE_HEADER_NAMEÚTransactionSource)Úhas_span_streaming_enabled)ÚAnnotatedValueÚcapture_internal_exceptionsÚevent_from_exceptionÚhas_data_collection_enabledÚR)ÚBroker)ÚRetry)ÚMessage)Ú
MiddlewareÚdefault_middlewarez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© ó    úQC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/dramatiq.pyÚ
setup_oncezDramatiqIntegration.setup_once8   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         }d}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   r+   c              3   ó*   K  — | ]} |¦   «         V — Œd S r)   r+   ©Ú.0Úms     r-   ú	<genexpr>zP_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__.<locals>.<genexpr>R   s(   è è € Ð>Ð> a˜a˜a™cœcÐ>Ð>Ð>Ð>Ð>Ð>r,   c                 ó<   — g | ]}t          |t          ¦  «        °|‘ŒS r+   )Ú
isinstanceÚSentryMiddlewarer?   s     r-   ú
<listcomp>zQ_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__.<locals>.<listcomp>W   s(   € ÐWÐWÐW µzÀ!ÕEUÑ7VÔ7VÐW˜!ÐWÐWÐWr,   )Ú
sentry_sdkÚ
get_clientÚget_integrationr%   ÚpopÚKeyErrorÚlenÚlistr   ÚinsertrE   )r8   r9   r:   Úintegrationr<   Úoriginal_broker__init__s        €r-   Úsentry_patched_broker__init__z=_patch_dramatiq_broker.<locals>.sentry_patched_broker__init__@   s  ø€ õ !Ô+Ñ-Ô-×=Ò=Õ>QÑRÔRˆð
	"ØŸš Ñ-Ô-ˆJˆJøÝð 	"ð 	"ð 	"õ �4‰yŒy˜AŠ~ˆ~Ø! !œW�
Ø��à!�
øøð	"øøøð ÐÝÐ>Ð>Õ+=Ð>Ñ>Ô>Ñ>Ô>ˆJˆJå˜jÑ)Ô)ˆJàÐ"ØWÐW ZÐWÑWÔWˆJØ×Ò˜aÕ!1Ñ!3Ô!3Ñ4Ô4Ð4à%ˆˆ<ÑØÐ Ð2 tÐ2Ð2Ð2¨rÐ2Ð2Ð2Ð2Ð2s   ®A Á*A1Á0A1)r8   r   r9   r   r:   r   r'   N)r   Ú__init__)rQ   rP   s    @r-   r*   r*   =   sV   ø€ Ý$œoÐð3Øð3Ø$ð3Ø,1ð3à	ð3ð 3ð 3ð 3ð 3ð 3ð: 4…F„O€O€Or,   c                   ó\   — 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eZ	d	S )rE   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)   )
rG   rH   rI   r%   r   r   r   r   ÚoptionsÚSENTRY_HEADERS_NAME)r8   rU   rV   rX   rO   s        r-   Úbefore_enqueuezSentryMiddleware.before_enqueuek   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        ¦  «        r‰t           j                             |¦  «         t           j                             |j        dt(          j        dt          j        dt.          j        j        t4          j        |j        id ¬¦  «        }||_        d S t#          ||j        t(          j        t<          j        t          j        ¬¦  «        }|                     t@          j!        ¦  «         t          j"        ||j        t(          j        t<          j        ¬¦  «         |                     ¦   «          | #                    t4          j        |j        ¦  «         ||_        d S )	NÚdramatiq_message_idÚretriesz	sentry.opzsentry.originzsentry.segment.name.source)ÚnameÚ
attributesÚparent_span)r`   ÚopÚsourcer5   )r`   rc   rd   )$rG   rH   rI   r%   Úisolation_scopeÚ_scope_managerÚ	__enter__Úclear_breadcrumbsÚ	set_extraÚ
message_idÚadd_event_processorÚ_make_message_event_processorrZ   Úgetr[   r   Útracesr   Ú
start_spanÚ
actor_namer   ÚQUEUE_TASK_DRAMATIQr5   r   ÚTASKÚvaluer   ÚMESSAGING_DESTINATION_NAMEÚ
queue_nameÚ_sentry_span_ctxr   Ú
set_statusr	   ÚOKÚstart_transactionÚset_data)	r8   rU   rV   ÚclientrO   ÚscopeÚsentry_headersÚspanÚtransactions	            r-   Úbefore_process_messagez'SentryMiddleware.before_process_messagew   s  € ÝÔ&Ñ(Ô(ˆØ×,Ò,Õ-@ÑAÔAˆØÐØˆFå!+Ô!;Ñ!=Ô!=ˆÔØÔ&×0Ò0Ñ2Ô2ˆØ×ÒÑ!Ô!Ð!Ø�ŠÐ-¨wÔ/AÑBÔBÐBØ×!Ò!Õ"?ÀÈÑ"UÔ"UÑVÔVÐVà œ×,Ò,¨TÔ-EÑFÔFÐLÈ"ˆØ˜œÐ'Ð'àˆNå% f¤nÑ5Ô5ð  	3ÝÔ×,Ò,¨^Ñ<Ô<Ð<ÝÔ$×/Ò/ØÔ'à¥Ô!7Ø#Õ%8Ô%?Ø0Õ2CÔ2HÔ2NÝÔ7¸Ô9Kð	ð !ð 0ñ 	ô 	ˆDð (,ˆGÔ$Ð$Ð$å(ØØÔ'ÝÔ)Ý(Ô-Ý*Ô1ðñ ô ˆKð ×"Ò"¥:¤=Ñ1Ô1Ð1ÝÔ(ØØÔ'ÝÔ)Ý(Ô-ð	ñ ô ð ð ×!Ò!Ñ#Ô#Ð#Ø× Ò ÝÔ3°WÔ5Gñô ð ð (3ˆGÔ$Ð$Ð$r,   )ÚresultÚ	exceptionr�   úOptional[Any]r‚   úOptional[Exception]c                ó"  — t          j        ¦   «                              t          ¦  «        }|€d S |                     |j        ¦  «        }|j                             d¦  «        p|j                             d¦  «        }|j        }t          |dd ¦  «        }	|	€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Úthrowsrv   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)rG   rH   rI   r%   Ú	get_actorrp   rZ   rm   rf   ÚgetattrrD   r   Ú__exit__r   r4   Úcapture_eventr‡   )r8   rU   rV   r�   r‚   rO   Úactorr†   Úscope_managerÚspan_ctxÚis_event_capture_requiredÚeventr‹   s                r-   Úafter_process_messagez&SentryMiddleware.after_process_messageª   s¥  € õ !Ô+Ñ-Ô-×=Ò=Õ>QÑRÔRˆØÐØˆFà× Ò  Ô!3Ñ4Ô4ˆØ”×$Ò$ XÑ.Ô.ÐM°%´-×2CÒ2CÀHÑ2MÔ2MˆàÔ.ˆÝ˜7Ð$6¸Ñ=Ô=ˆØÐØ�4ð ˜TÐ!ð 1ØÐ=¥
¨9°fÑ =Ô =Ð>ð1å˜y­%Ñ0Ô0Ð0ð 	"ð
 )ð 	à×Ò˜d D¨$Ñ/Ô/Ð/Ø×"Ò" 4¨¨tÑ4Ô4Ð4ØˆFå*ØÝ%Ô0Ñ2Ô2Ô:å+Ô6Ø ðð ð
ñ 
ô 
‰ˆˆtõ 	Ô  ¨TÐ2Ñ2Ô2Ð2à×Ò�$˜y™/œ/¨9°dÑ;Ô;Ð;Ø×Ò�t I™œ°	¸4Ñ@Ô@Ð@Ð@Ð@r,   )rU   r   rV   rW   r'   N)
rU   r   rV   rW   r�   rƒ   r‚   r„   r'   N)
r0   r1   r2   r3   r[   Úintr\   r€   r•   Úafter_skip_messager+   r,   r-   rE   rE   `   sÏ   € € € € € ðð ð ,Ðð

Øð

Ø)5ð

Ø>Að

à	ð

ð 

ð 

ð 

ð13ð 13ð 13ð 13ðp #'Ø+/ð*Að *Aàð*Að ð*Að
  ð*Að )ð*Að 
ð*Að *Að *Að *AðX /ÐÐÐr,   rE   rV   rW   rO   ú(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‹   rV   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+   )rV   rO   rž   s   `  r-   rl   rl   Ù   s(   ø€ ðð ð ð ð ð ð €Lr,   c                   ó*   — e Zd Zd
d„Zdefd„Zdd	„ZdS )rœ   rV   rW   r'   Nc                 óR   — t          |                     ¦   «         ¦  «        | _        d S r)   )ÚdictÚasdictÚmessage_data)r8   rV   s     r-   rR   z!DramatiqMessageExtractor.__init__æ   s"   € Ý  §¢Ñ!1Ô!1Ñ2Ô2ˆÔÐÐr,   c                 óN   — t          t          j        | j        ¦  «        ¦  «        S r)   )rL   ÚjsonÚdumpsr£   )r8   s    r-   Úcontent_lengthz'DramatiqMessageExtractor.content_lengthé   s   € Ý•4”:˜dÔ/Ñ0Ô0Ñ1Ô1Ð1r,   r”   r"   c                 ó   — t          j        ¦   «         }|                     ¦   «         sd S |                     di ¦  «        }|                     di ¦  «        }d|d<   d}t	          |j        ¦  «        rd|j        d         d         v }|rFd }t          ||                      ¦   «         ¦  «        st          j	        ¦   «         }n| j
        }||d<   d S d S )	NÚcontextsr&   r‡   TÚincoming_requestÚdata_collectionÚhttp_bodiesÚdata)rG   rH   Ú	is_activeÚ
setdefaultr   rZ   r   r§   r   Úremoved_because_over_size_limitr£   )r8   r”   r{   r©   Úrequest_infoÚattach_request_bodyr­   s          r-   r�   z+DramatiqMessageExtractor.extract_into_eventì   sî   € ÝÔ&Ñ(Ô(ˆØ×ÒÑ!Ô!ð 	ØˆFà×#Ò# J°Ñ3Ô3ˆØ×*Ò*¨:°rÑ:Ô:ˆØ)ˆ�VÑà"ÐÝ& v¤~Ñ6Ô6ð 	à" f¤nÐ5FÔ&GÈÔ&VÐVð  ð ð 	(ØFJˆDÝ-¨f°d×6IÒ6IÑ6KÔ6KÑLÔLð )Ý%ÔEÑGÔG��àÔ(�à#'ˆL˜Ñ Ð Ð ð	(ð 	(r,   )rV   rW   r'   N)r”   r"   r'   N)r0   r1   r2   rR   r–   r§   r�   r+   r,   r-   rœ   rœ   å   sW   € € € € € ð3ð 3ð 3ð 3ð2 ð 2ð 2ð 2ð 2ð(ð (ð (ð (ð (ð (r,   rœ   r/   )rV   rW   rO   r%   r'   r˜   )7r¥   Útypingr   rG   Úsentry_sdk.apir   r   r   Úsentry_sdk.constsr   r   r	   Úsentry_sdk.integrationsr
   r   Ú$sentry_sdk.integrations._wsgi_commonr   Úsentry_sdk.tracesr   Úsentry_sdk.tracingr   r   r   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   Údramatiq.brokerr   Údramatiq.errorsr   Údramatiq.messager   Údramatiq.middlewarer   r   ÚImportErrorr   r   r   r   r    r!   Úsentry_sdk._typesr"   r#   r%   r*   rE   rl   rœ   r+   r,   r-   ú<module>rÂ      sæ  ðØ €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø KÐ KÐ KÐ KÐ KÐ KØ /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð
 @Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð €GˆC�L„L€ð4Ø&Ð&Ð&Ð&Ð&Ð&Ø%Ð%Ð%Ð%Ð%Ð%Ø(Ð(Ð(Ð(Ð(Ð(ØBÐBÐBÐBÐBÐBÐBÐBÐBøØð 4ð 4ð 4Ø
ˆ,Ð2Ñ
3Ô
3Ð3ð4øøøð !Ð  Ð  Ð  Ð  Ð  àð .Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð!ð !ð !ð !ð !˜+ñ !ô !ð !ð( 4ð  4ð  4ð  4ðFv/ð v/ð v/ð v/ð v/�zñ v/ô v/ð v/ðr	Øð	Ø(=ð	à/ð	ð 	ð 	ð 	ð(ð (ð (ð (ð (ñ (ô (ð (ð (ð (s   ÁA: Á:B