§
    xÅj2ï  ã                   óv  — d dl Z d dlZd dlZd dlZd dlZd dlZ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 d dlmZmZ 	 d dlmZ n# e$ r	 d dlmZ Y nw xY wd dlmZ d dl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"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, er&d dl-m.Z. d dlm/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dlm9Z9  ej:        d¦  «        Z;dZ< G d„ de	¦  «        Z=ddde>fd„Z?ddde>fd„Z@ddde>fd„ZAe jB        	 	 	 d”ddddddd d!d"e>d#e>d$eCd%d!dd&fd'„¦   «         ZDd•d,„ZE	 	 	 	 	 	 d–d2„ZFd—d5„ZGd6e>d7d!d8d9d:d9d;d!d<d!de>fd=„ZH	 	 	 	 	 	 	 	 	 	 d˜d@„ZI	 	 	 	 d™dA„ZJ	 	 	 	 d™dB„ZK	 	 	 	 dšdE„ZLdddFeCdd!fdG„ZM G dH„ dI¦  «        ZN G dJ„ dK¦  «        ZOd-d.dLeCde>fdM„ZP	 	 	 	 	 	 d›dO„ZQdœdR„ZRdddejS        f	 	 	 	 	 	 	 	 	 d�dY„ZT	 	 	 dždUd!dVdd[e>ddfd\„ZU	 dŸ	 	 	 d d`„ZVdadbœdcd!dddedeWfdf„ZX	 	 	 	 	 	 d¡dk„ZYdlddmeCddnfdo„ZZ	 dŸdWdpdUeCdqddeCfdr„Z[dWdpdeCfds„Z\ e]ej^        ej_        ej`        h¦  «        Zadtdude>fdv„ZbdWdpdwe>dxdydqd+dd+f
dz„Zcd¢d|„ZddWdpd}e>d~ddd+fd„Zed>d€dWdpdwe>dUeCd�ddxdydqd+ddfd‚„Zfd>d€dWdpd}e>d~dddf
dƒ„Zgd„d…de>fd†„Zhd‡dˆd‰eCddfdŠ„ZidUeCdVd‹d]dŒdd�fdŽ„ZjdUeCdVd‹de>fd�„Zkd d�llmmZmmnZn d d‘llmoZp d d’lqmrZrmsZsmtZtmuZu erd d“lqmuZu dS dS )£é    N)ÚMappingÚMutableMapping)ÚdatetimeÚ	timedeltaÚtimezone)ÚRandom)ÚquoteÚunquote)ÚPattern)ÚTYPE_CHECKING)ÚOPÚSPANDATAÚSPANTEMPLATE)Ú0_apply_data_collection_filtering_to_query_string)Ú_is_external_sourceÚ_is_in_project_rootÚ_module_in_listÚcapture_internal_exceptionsÚfilename_for_moduleÚhas_data_collection_enabledÚis_sentry_urlÚis_valid_sample_rateÚloggerÚmatch_regex_listÚqualname_from_functionÚ	safe_reprÚ	to_stringÚtry_convert)Ú	FrameType)ÚAnyÚDictÚ	GeneratorÚIteratorÚLiteralÚOptionalÚTupleÚUnion)Ú
Attributes)Ú	ParsedUrlz5^[ 	]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ 	]*$z(([a-zA-Z0-9+/]{4})*([a-zA-Z0-9+/]{2,3})?c                   óJ   — e Zd Z	 ddddeddfd„Zdedd	fd
„Zdefd„Zdd„ZdS )ÚEnvironHeadersÚHTTP_ÚenvironzMapping[str, str]ÚprefixÚreturnNc                 ó"   — || _         || _        d S ©N)r-   r.   )Úselfr-   r.   s      úIC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/tracing_utils.pyÚ__init__zEnvironHeaders.__init__S   s   € ð
 ˆŒØˆŒˆˆó    ÚkeyúOptional[Any]c                 óx   — | j         | j        |                     dd¦  «                             ¦   «         z            S ©Nú-Ú_)r-   r.   ÚreplaceÚupper)r2   r6   s     r3   Ú__getitem__zEnvironHeaders.__getitem__[   s0   € ØŒ|˜DœK¨#¯+ª+°c¸3Ñ*?Ô*?×*EÒ*EÑ*GÔ*GÑGÔHÐHr5   c                 óN   — t          d„ t          | ¦  «        D ¦   «         ¦  «        S )Nc              3   ó   K  — | ]}d V — ŒdS )é   N© )Ú.0r;   s     r3   ú	<genexpr>z)EnvironHeaders.__len__.<locals>.<genexpr>_   s"   è è € Ð)Ð)˜�1Ð)Ð)Ð)Ð)Ð)Ð)r5   )ÚsumÚiter©r2   s    r3   Ú__len__zEnvironHeaders.__len__^   s%   € ÝÐ)Ð)�d 4™jœjÐ)Ñ)Ô)Ñ)Ô)Ð)r5   úGenerator[str, None, None]c              #   ó  K  — | j         D ]y}t          |t          ¦  «        sŒ|                     dd¦  «                             ¦   «         }|                     | j        ¦  «        sŒ[|t          | j        ¦  «        d …         V — Œzd S r9   )r-   Ú
isinstanceÚstrr<   r=   Ú
startswithr.   Úlen)r2   Úks     r3   Ú__iter__zEnvironHeaders.__iter__a   s’   è è € Ø”ð 	(ð 	(ˆAÝ˜a¥Ñ%Ô%ð Øà—	’	˜#˜sÑ#Ô#×)Ò)Ñ+Ô+ˆAØ—<’< ¤Ñ,Ô,ð Øà•C˜œÑ$Ô$Ð&Ð&Ô'Ð'Ð'Ð'Ð'ð	(ð 	(r5   )r,   )r/   rI   )	Ú__name__Ú
__module__Ú__qualname__rL   r4   r>   ÚintrH   rP   rB   r5   r3   r+   r+   R   s¥   € € € € € ð ðð à$ðð ðð 
ð	ð ð ð ðI˜sð I ð Ið Ið Ið Ið*˜ð *ð *ð *ð *ð	(ð 	(ð 	(ð 	(ð 	(ð 	(r5   r+   ÚoptionsúOptional[Dict[str, Any]]r/   c                 ó®   — | €dS t          |                      d¦  «        duo-|                      d¦  «        dup|                      d¦  «        du¦  «        S )z}
    Returns True if either traces_sample_rate or traces_sampler is
    defined and enable_tracing is set and not false.
    NFÚenable_tracingÚtraces_sample_rateÚtraces_sampler)ÚboolÚget©rU   s    r3   Úhas_tracing_enabledr^   m   si   € ð
 €ØˆuåØ�ŠÐ$Ñ%Ô%¨UÐ2ð 	
à�KŠKÐ,Ñ-Ô-°TÐ9ð 9Ø�{Š{Ð+Ñ,Ô,°DÐ8ñ	ô ð r5   úOptional[dict[str, Any]]c                 óÆ   — | €dS |                       d¦  «        pi                       d¦  «        dk    }|                       d¦  «        �|                       d¦  «        dk    S |S )NFÚ_experimentsÚtrace_lifecycleÚstream)r\   )rU   Úis_enabled_in_experiment_configs     r3   Úhas_span_streaming_enabledre   ~   sq   € Ø€Øˆuà'.§{¢{°>Ñ'BÔ'BÐ'HÀb×&MÒ&MØñ'ô 'à	ò'Ð#ð ‡{‚{Ð$Ñ%Ô%Ð1Ø�{Š{Ð,Ñ-Ô-°Ò9Ð9à*Ð*r5   c                 óX   — | €dS |                       dd¦  «         ot          | ¦  «         S )NTÚstream_gen_ai_spans)r\   re   r]   s    r3   Úshould_truncate_gen_ai_inputrh   Œ   s?   € Ø€Øˆtà�{Š{Ø˜tñô ð ð 2å(¨Ñ1Ô1Ð
1ð2r5   FÚmanualÚcursorr    ÚqueryÚparams_listÚ
paramstyleúOptional[str]ÚexecutemanyÚrecord_cursor_reprÚspan_originÚspan_op_override_valuezUGenerator[Union[sentry_sdk.tracing.Span, sentry_sdk.traces.StreamedSpan], None, None]c              #   óÈ  K  — t          j        ¦   «         }t          |j        ¦  «        r,|j        d         d         r|r|d gk    rd }|dk    rd}n>d }d }n9|j        d                              dd¦  «        r|r|d gk    rd }|dk    rd}nd }d }t          | |¦  «        }i }	|�||	d<   |�||	d	<   |rd
|	d<   |r| �| |	d<   t          ¦   «         5  t          j        |d|	¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          |j        ¦  «        r`i }
|�||
d<   t           j	         
                    |€dn|||r|nt          j        dœ|
¥¬¦  «        5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S t          j
        |�|nt          j        ||¬¦  «        5 }|	                     ¦   «         D ]\  }}|                     ||¦  «         Œ|V — d d d ¦  «         d S # 1 swxY w Y   d S )NÚdata_collectionÚdatabase_query_dataÚpyformatÚformatra   Úrecord_sql_paramsFz	db.paramszdb.paramstyleTzdb.executemanyz	db.cursorrk   )ÚmessageÚcategoryÚdatazdb.query.textz<unknown SQL query>)zsentry.originú	sentry.op)ÚnameÚ
attributes)Úopr}   Úorigin)Ú
sentry_sdkÚ
get_clientr   rU   r\   Ú_format_sqlr   Úadd_breadcrumbre   ÚtracesÚ
start_spanr   ÚDBÚitemsÚset_data)rj   rk   rl   rm   ro   rp   rq   rr   Úclientr{   Úadditional_attributesÚspanrO   Úvs                 r3   Úrecord_sql_queriesrŽ   •   sp  è è € õ Ô"Ñ$Ô$€FÝ" 6¤>Ñ2Ô2ð ØŒ>Ð+Ô,Ð-BÔCð 	Øð # +°$°Ò"7Ð"7Ø"�à˜ZÒ'Ð'Ø%�
øàˆKØˆJˆJð Œ>˜.Ô)×-Ò-Ð.AÀ5ÑIÔIð 	Øð # +°$°Ò"7Ð"7Ø"�à˜ZÒ'Ð'Ø%�
øàˆKØˆJå˜ Ñ&Ô&€Eà€DØÐØ'ˆˆ[ÑØÐØ *ˆˆ_ÑØð &Ø!%ˆÐÑØð #˜fÐ0Ø"ˆˆ[Ñå	$Ñ	&Ô	&ð Nð NÝÔ!¨%¸'ÈÐMÑMÔMÐMðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nõ " &¤.Ñ1Ô1ð Ø "ÐØÐØ5:Ð! /Ñ2åÔ×)Ò)Ø*/¨-Ð&Ð&¸Uà!,à)ðÐ3Ð3å”Uð	ð ð
 (ðð *ñ 	
ô 	
ð 
	ð ØˆJˆJˆJð
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	ð 
	ð 
	õ Ô"Ø)?Ð)KÐ%Ð%ÕQSÔQVØØð
ñ 
ô 
ð 	ð ØŸ
š
™œð $ð $‘��1Ø—’˜a Ñ#Ô#Ð#Ð#ØˆJˆJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s6   ÃC1Ã1C5Ã8C5ÅE#Å#E'Å*E'Æ5GÇGÇGÚstatus_codeúOptional[int]r{   údict[str, Any]c                 ó”   — d }| r%d| cxk    rdk    rn nd}nd| cxk    rdk    rn nd}dd|d	œ}|r||d
<   t          j        di |¤Ž d S )Niô  iW  Úerrori�  ió  ÚwarningÚhttpÚhttplib)Útyperz   r{   ÚlevelrB   )r�   r„   )r�   r{   r˜   Úkwargss       r3   Úadd_http_breadcrumbrš   â   sœ   € Ø€EØð Ø�+Ð$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$ØˆEˆEØ�KÐ&Ð&Ò&Ð& 3Ò&Ð&Ð&Ð&Ð&ØˆEà(.¸IÈtÐTÐT€FØð  Øˆˆw‰åÔÐ'Ð' Ð'Ð'Ð'Ð'Ð'r5   rŠ   úsentry_sdk.client.BaseClientÚ
parsed_urlúOptional[ParsedUrl]r(   c                 ó†  — i }|€|S t          | j        ¦  «        r1d}|j        r't          |j        | j        d         d         ¬¦  «        }n|                      ¦   «         r|j        }n|S |j        }|r||t          j        <   |d|z   z  }|j        r!|j        |t          j	        <   |d|j        z   z  }||t          j
        <   |S )a  Build the `url.*` span attributes for an outgoing HTTP request.

    The query string is only included when the user has opted into collecting
    it, either through `data_collection` (in which case the configured
    filtering is applied) or through the legacy `send_default_pii`.
    Nrt   Úurl_query_params)Úquery_stringÚ	behaviourú?ú#)r   rU   rk   r   Úshould_send_default_piiÚurlr   Ú	URL_QUERYÚfragmentÚURL_FRAGMENTÚURL_FULL)rŠ   rœ   r~   rk   Úurl_fulls        r3   Úget_url_attributesr«   ñ   sõ   € ð  "€JØÐØÐõ # 6¤>Ñ2Ô2ð 
ØˆØÔð 	ÝDØ'Ô-Ø œ.Ð):Ô;Ð<NÔOðñ ô ˆEøð 
×	'Ò	'Ñ	)Ô	)ð ØÔ ˆˆàÐàŒ~€HØð  Ø).ˆ
•8Ô%Ñ&Ø�C˜%‘KÑˆàÔð .Ø,6Ô,?ˆ
•8Ô(Ñ)Ø�C˜*Ô-Ñ-Ñ-ˆà$,€J�xÔ Ñ!àÐr5   Úframer   c                 ó>   — 	 | j         j        S # t          $ r Y d S w xY wr1   )Úf_codeÚco_filenameÚ	Exception)r¬   s    r3   Ú_get_frame_module_abs_pathr±     s4   € ðØŒ|Ô'Ð'øÝð ð ð Øˆtˆtðøøøs   ‚ Ž
›Úis_sentry_sdk_frameÚ	namespaceÚin_app_includeúOptional[list[str]]Úin_app_excludeÚabs_pathÚproject_rootc                 ó�   — t          ||¦  «        }t          |¦  «        pt          ||¦  «        }|  o|pt          ||¦  «        o| S r1   )r   r   r   )r²   r³   r´   r¶   r·   r¸   Úshould_be_includedÚshould_be_excludeds           r3   Ú_should_be_includedr¼      si   € õ )¨°NÑCÔCÐÝ,¨XÑ6Ô6ð ½/Ø�>ñ;ô ;Ðð #Ð"ð Øð 	TÝ ¨,Ñ7Ô7ÐRÐ@RÐ<Rðr5   rŒ   ú>Union[sentry_sdk.tracing.Span, sentry_sdk.traces.StreamedSpan]c                 ó¦  — t          j        ¦   «         }|�wt          |¦  «        }	 |j                             d¦  «        }n# t
          $ r d}Y nw xY w|duo|                     d¦  «        }t          ||||||¬¦  «        }|rn|j        }|­wd}|��=	 |j	        }	n# t
          $ r d}	Y nw xY w|	�Lt          | t          ¦  «        r!|                      t          j        |	¦  «         n|                      d|	¦  «         	 |j                             d¦  «        }n# t
          $ r d}Y nw xY w|�Vt          | t          ¦  «        r!|                      t          j        |¦  «         n |                      t          j        |¦  «         t          |¦  «        }
|
�®|�t#          ||
¦  «        }nM|�I|
                     |¦  «        r4|
                     |d¦  «                             t(          j        ¦  «        }n|
}t          | t          ¦  «        r!|                      t          j        |¦  «         n|�|                      d|¦  «         	 |j        j        }n# t
          $ r d}Y nw xY w|�ot          | t          ¦  «        r,|                      t          j        |j        j        ¦  «         dS |                      t          j        |j        j        ¦  «         dS dS dS )zB
    Adds OTel compatible source code information to the span
    NrQ   zsentry_sdk.)r²   r³   r´   r¶   r·   r¸   zcode.line.numberÚ zcode.file.path)ÚsysÚ	_getframer±   Ú	f_globalsr\   r°   rM   r¼   Úf_backÚf_linenorK   ÚSpanr‰   r   ÚCODE_LINENOÚset_attributeÚCODE_NAMESPACEr   r<   ÚlstripÚosÚsepÚCODE_FILEPATHr®   Úco_nameÚCODE_FUNCTION)rŒ   r¸   r´   r¶   r¬   r·   r³   r²   rº   ÚlinenoÚfilepathÚin_app_pathÚcode_functions                r3   Ú
add_sourcerÓ   3  sE  € õ '*¤m¡o¤o€EØ
Ð
Ý-¨eÑ4Ô4ˆð	Ø).¬×)<Ò)<¸ZÑ)HÔ)HˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøð (¨tÐ3ð 
¸	×8LÒ8LØñ9
ô 9
Ðõ 1Ø 3ØØ)Ø)ØØ%ð
ñ 
ô 
Ðð ð 	Øà”ˆð/ Ð
ð2 ˆð Ñð	Ø”^ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøàÐÝ˜$¥Ñ%Ô%ð ?Ø—’�hÔ2°FÑ;Ô;Ð;Ð;à×"Ò"Ð#5°vÑ>Ô>Ð>ð	Øœ×+Ò+¨JÑ7Ô7ˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøàÐ Ý˜$¥Ñ%Ô%ð GØ—’�hÔ5°yÑAÔAÐAÐAà×"Ò"¥8Ô#:¸IÑFÔFÐFå-¨eÑ4Ô4ˆØÐØÐ$Ý1°)¸XÑFÔF��ØÐ)¨h×.AÒ.AÀ,Ñ.OÔ.OÐ)Ø&×.Ò.¨|¸RÑ@Ô@×GÒGÍÌÑOÔO��à&�å˜$¥Ñ%Ô%ð FØ—’�hÔ4°kÑBÔBÐBÐBàÐ*Ø×&Ò&Ð'7¸ÑEÔEÐEð	!Ø!œLÔ0ˆMˆMøÝð 	!ð 	!ð 	!Ø ˆMˆMˆMð	!øøøð Ð$Ý˜$¥Ñ%Ô%ð QØ—’�hÔ4°e´lÔ6JÑKÔKÐKÐKÐKà×"Ò"¥8Ô#9¸5¼<Ô;OÑPÔPÐPÐPÐPð[ ÐðR %Ð$sG   ¦A ÁAÁAÂB ÂB*Â)B*Ã<D ÄD&Ä%D&ÉI ÉIÉIc                 óˆ  — t          j        ¦   «         }|                     ¦   «         sdS t          | t          ¦  «        r	| j        €dS | j        €dS |j                             dd¦  «        }|sdS t          | t          ¦  «        r| j
        }n| j        }|pt          j        t          j        ¦  «        }|| j        z
  }|j                             dd¦  «        }|t          d¬¦  «        z  |k    }|sdS t!          | |j        d         |j                             d	¦  «        |j                             d
¦  «        ¬¦  «         dS )zO
    Adds OTel compatible source code information to a database query span
    NÚenable_db_query_sourceTÚdb_query_source_threshold_msr   rA   ©Úmillisecondsr¸   r´   r¶   ©rŒ   r¸   r´   r¶   ©r�   r‚   Ú	is_activerK   rÅ   Ú	timestampÚstart_timestamprU   r\   ÚStreamedSpanÚend_timestampr   Únowr   Úutcr   rÓ   )rŒ   rŠ   Úshould_add_query_sourcerß   ÚdurationÚ	thresholdÚ
slow_querys          r3   Úadd_query_sourceræ   Š  s[  € õ Ô"Ñ$Ô$€FØ×ÒÑÔð Øˆå�$�ÑÔð ð Œ>Ð!ØˆFàÔÐ#Øˆà$œn×0Ò0Ð1IÈ4ÑPÔPÐØ"ð Øˆå�$�Ñ%Ô%ð 'ØÔ*ˆˆàœˆà!Ð?¥X¤\µ(´,Ñ%?Ô%?€Mà˜tÔ3Ñ3€HØ”×"Ò"Ð#AÀ1ÑEÔE€IØ�I°1Ð5Ñ5Ô5Ñ5¸	ÒA€Jàð ØˆåØØ”^ NÔ3Ø”~×)Ò)Ð*:Ñ;Ô;Ø”~×)Ò)Ð*:Ñ;Ô;ð	ñ ô ð ð ð r5   c                 óˆ  — t          j        ¦   «         }|                     ¦   «         sdS t          | t          ¦  «        r	| j        €dS | j        €dS |j                             dd¦  «        }|sdS t          | t          ¦  «        r| j
        }n| j        }|pt          j        t          j        ¦  «        }|| j        z
  }|j                             dd¦  «        }|t          d¬¦  «        z  |k    }|sdS t!          | |j        d         |j                             d	¦  «        |j                             d
¦  «        ¬¦  «         dS )z]
    Adds OTel compatible source code information to a span for an outgoing HTTP request
    NÚenable_http_request_sourceTÚ http_request_source_threshold_msr   rA   r×   r¸   r´   r¶   rÙ   rÚ   )rŒ   rŠ   Úshould_add_request_sourcerß   rã   rä   rå   s          r3   Úadd_http_request_sourcerë   ¸  s\  € õ Ô"Ñ$Ô$€FØ×ÒÑÔð Øˆå�$�ÑÔð ð Œ>Ð!ØˆFàÔÐ#Øˆà &¤× 2Ò 2Ð3OÐQUÑ VÔ VÐØ$ð Øˆå�$�Ñ%Ô%ð 'ØÔ*ˆˆàœˆà!Ð?¥X¤\µ(´,Ñ%?Ô%?€Mà˜tÔ3Ñ3€HØ”×"Ò"Ð#EÀqÑIÔI€IØ�I°1Ð5Ñ5Ô5Ñ5¸	ÒA€Jàð ØˆåØØ”^ NÔ3Ø”~×)Ò)Ð*:Ñ;Ô;Ø”~×)Ò)Ð*:Ñ;Ô;ð	ñ ô ð ð ð r5   Úheaderú+Optional[Dict[str, Union[str, bool, None]]]c                 ó  — | sdS d| v r9d„ |                       d¦  «        D ¦   «         }t          d„ |D ¦   «         d¦  «        } | sdS |                      d¦  «        r|                      d¦  «        r
| dd	…         } t                               | ¦  «        }|sdS |                     ¦   «         \  }}}d}|r#d
                     t          |d¦  «        ¦  «        }|r#d                     t          |d¦  «        ¦  «        }|r|dk    }|||dœS )zL
    Given a `sentry-trace` header string, return a dictionary of data.
    Nú,c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rB   )Ústrip©rC   Úparts     r3   ú
<listcomp>z,extract_sentrytrace_data.<locals>.<listcomp>ñ  s    € Ð<Ð<Ð< $�—’‘”Ð<Ð<Ð<r5   c              3   ó   K  — | ]}|¯|V — Œ	d S r1   rB   rò   s     r3   rD   z+extract_sentrytrace_data.<locals>.<genexpr>ò  s'   è è € Ð6Ð6 °Ð6�tÐ6Ð6Ð6Ð6Ð6Ð6r5   r¿   z00-z-00é   éýÿÿÿz{:032x}é   z{:016x}Ú0)Útrace_idÚparent_span_idÚparent_sampled)	ÚsplitÚnextrM   ÚendswithÚSENTRY_TRACE_REGEXÚmatchÚgroupsrw   rT   )rì   Úpartsr  rú   rû   Úsampled_strrü   s          r3   Úextract_sentrytrace_datar  æ  sJ  € ð ð Øˆtà
ˆf€}€}à<Ð<¨&¯,ª,°sÑ*;Ô*;Ð<Ñ<Ô<ˆÝÐ6Ð6¨Ð6Ñ6Ô6¸Ñ;Ô;ˆàð Øˆtà×Ò˜ÑÔð  F§O¢O°EÑ$:Ô$:ð Ø˜˜"˜”ˆå×$Ò$ VÑ,Ô,€EØð Øˆtà,1¯LªL©N¬NÑ)€Hˆn˜kØ€Nàð 7Ø×#Ò#¥C¨°"Ñ$5Ô$5Ñ6Ô6ˆØð CØ"×)Ò)­#¨n¸bÑ*AÔ*AÑBÔBˆØð ,Ø$¨Ò+ˆð Ø(Ø(ðð ð r5   Úsqlc                 ó  — d }	 t          | d¦  «        rI|                      |¦  «        }t          |t          ¦  «        r|                     | j        j        ¦  «        }n# t          $ r d }Y nw xY w|pt          |¦  «        S )NÚmogrify)	Úhasattrr  rK   ÚbytesÚdecodeÚ
connectionÚencodingr°   r   )rj   r  Úreal_sqls      r3   rƒ   rƒ     s’   € Ø€HðÝ�6˜9Ñ%Ô%ð 	GØ—~’~ cÑ*Ô*ˆHÝ˜(¥EÑ*Ô*ð GØ#Ÿ?š?¨6Ô+<Ô+EÑFÔF�øøÝð ð ð Øˆˆˆðøøøð Ð%•y ‘~”~Ð%s   „AA ÁA-Á,A-c                   ób  — e Zd ZdZdZ	 	 	 	 	 	 d)	 	 	 	 	 	 	 	 	 	 	 	 	 d*d„Ze	 	 	 	 d+d„¦   «         Zede	fd„¦   «         Z
e
j        de	ddfd„¦   «         Z
ede	fd„¦   «         Zej        de	ddfd„¦   «         Zed,d„¦   «         Zde	fd„Zd-d„Zd.d„Zd/d „Z	 	 	 	 d0d#„Zde	fd$„Zd1d%„Zd2d&„Zd3d(„ZdS )4ÚPropagationContextzJ
    The PropagationContext represents the data of a trace in Sentry.
    )Ú	_trace_idÚ_span_idrû   rü   ÚbaggageÚcustom_sampling_contextNrú   rn   Úspan_idrû   rü   úOptional[bool]Údynamic_sampling_contextúOptional[Dict[str, str]]r  úOptional[Baggage]r/   c                 ó–   — || _         	 || _        	 || _        	 || _        	 || _        	 	 |€|�t          |¦  «        | _        d | _        d S r1   )r  r  rû   rü   r  ÚBaggager  )r2   rú   r  rû   rü   r  r  s          r3   r4   zPropagationContext.__init__/  sn   € ð "ˆŒØ/àˆŒØ:à,ˆÔð	Hð -ˆÔð	Qð ˆŒØPàNØˆ?Ð7ÐCÝ"Ð#;Ñ<Ô<ˆDŒLàCGˆÔ$Ð$Ð$r5   Úincoming_dataúDict[str, Any]c                 ó�  — t          ¦   «         }t          |¦  «        }|                     t          ¦  «        }t	          |¦  «        }|€|S |                     t
          ¦  «        }|rt                               |¦  «        nd }t          |¦  «        s|S | 	                    |¦  «         |r||_
        |                     ¦   «          |S r1   )r  Únormalize_incoming_datar\   ÚSENTRY_TRACE_HEADER_NAMEr  ÚBAGGAGE_HEADER_NAMEr  Úfrom_incoming_headerÚ_should_continue_traceÚupdater  Ú_fill_sample_rand)Úclsr  Úpropagation_contextÚnormalized_dataÚsentry_trace_headerÚsentrytrace_dataÚbaggage_headerr  s           r3   Úfrom_incoming_dataz%PropagationContext.from_incoming_dataP  sÚ   € õ 1Ñ2Ô2ÐÝ1°-Ñ@Ô@ˆà-×1Ò1Õ2JÑKÔKÐÝ3Ð4GÑHÔHÐð Ð#Ø&Ð&à(×,Ò,Õ-@ÑAÔAˆà<JÐT�G×(Ò(¨Ñ8Ô8Ð8ÐPTð 	õ & gÑ.Ô.ð 	'Ø&Ð&à×"Ò"Ð#3Ñ4Ô4Ð4Øð 	2Ø*1ÐÔ'à×-Ò-Ñ/Ô/Ð/à"Ð"r5   c                 óX   — | j         st          j        ¦   «         j        | _         | j         S )z!The trace id of the Sentry trace.)r  ÚuuidÚuuid4ÚhexrG   s    r3   rú   zPropagationContext.trace_idn  s&   € ð Œ~ð 	.å!œZ™\œ\Ô-ˆDŒNàŒ~Ðr5   Úvaluec                 ó   — || _         d S r1   )r  ©r2   r1  s     r3   rú   zPropagationContext.trace_idw  s   € àˆŒˆˆr5   c                 óh   — | j         s%t          j        ¦   «         j        dd…         | _         | j         S )z+The span id of the currently executed span.rø   N)r  r.  r/  r0  rG   s    r3   r  zPropagationContext.span_id{  s/   € ð Œ}ð 	2Ý œJ™LœLÔ,¨R¨S¨SÔ1ˆDŒMàŒ}Ðr5   c                 ó   — || _         d S r1   )r  r3  s     r3   r  zPropagationContext.span_idƒ  s   € àˆŒˆˆr5   rV   c                 óN   — |                       ¦   «                              ¦   «         S r1   )Úget_baggager  rG   s    r3   r  z+PropagationContext.dynamic_sampling_context‡  s    € à×ÒÑ!Ô!×:Ò:Ñ<Ô<Ð<r5   c                 ó$   — | j         › d| j        › �S )Nr:   )rú   r  rG   s    r3   Úto_traceparentz!PropagationContext.to_traceparent‹  s   € Ø”-Ð0Ð0 $¤,Ð0Ð0Ð0r5   r  c                 ó\   — | j         €t                               | ¦  «        | _         | j         S r1   )r  r  Ú!populate_from_propagation_contextrG   s    r3   r7  zPropagationContext.get_baggageŽ  s'   € ØŒ<ÐÝ"×DÒDÀTÑJÔJˆDŒLØŒ|Ðr5   úIterator[Tuple[str, str]]c              #   ó®   K  — t           |                      ¦   «         fV — |                      ¦   «                              ¦   «         }|rt          |fV — dS dS )zw
        Creates a generator which returns the propagation_context's ``sentry-trace`` and ``baggage`` headers.
        N)r   r9  r7  Ú	serializer!  )r2   r  s     r3   Úiter_headerszPropagationContext.iter_headers“  sk   è è € õ '¨×(;Ò(;Ñ(=Ô(=Ð=Ð=Ð=Ð=à×"Ò"Ñ$Ô$×.Ò.Ñ0Ô0ˆØð 	/Ý% wÐ.Ð.Ð.Ð.Ð.Ð.ð	/ð 	/r5   Ú
other_dictc                 ó~   — |                      ¦   «         D ]'\  }}	 t          | ||¦  «         Œ# t          $ r Y Œ$w xY wdS )zU
        Updates the PropagationContext with data from the given dictionary.
        N)rˆ   ÚsetattrÚAttributeError)r2   r@  r6   r1  s       r3   r$  zPropagationContext.update�  sg   € ð %×*Ò*Ñ,Ô,ð 	ð 	‰JˆC�ðÝ˜˜c 5Ñ)Ô)Ð)Ð)øÝ!ð ð ð Ø�ðøøøð	ð 	s   ›-­
:¹:r  r‘   c                 ó   — || _         d S r1   )r  )r2   r  s     r3   Ú_set_custom_sampling_contextz/PropagationContext._set_custom_sampling_context§  s   € ð (?ˆÔ$Ð$Ð$r5   c                 óf   — d                      | j        | j        | j        | j        | j        ¦  «        S )Nz\<PropagationContext _trace_id={} _span_id={} parent_span_id={} parent_sampled={} baggage={}>)rw   r  r  rû   rü   r  rG   s    r3   Ú__repr__zPropagationContext.__repr__¬  s5   € Øm×tÒtØŒNØŒMØÔØÔØŒLñ
ô 
ð 	
r5   c                 ó´  — | j         €dS t          t          | j         j                             d¦  «        ¦  «        }|�d|cxk    rdk     rn ndS |                      ¦   «         }t          | j        |¦  «        \  }}	 t          | j	        ||f¬¦  «        }n1# t          $ r$ t          j        d| j        › d|› d�¦  «         Y dS w xY w|d	›| j         j        d<   dS )
a  
        Ensure that there is a valid sample_rand value in the baggage.

        If there is a valid sample_rand value in the baggage, we keep it.
        Otherwise, we generate a sample_rand value according to the following:

          - If we have a parent_sampled value and a sample_rate in the DSC, we compute
            a sample_rand value randomly in the range:
                - [0, sample_rate) if parent_sampled is True,
                - or, in the range [sample_rate, 1) if parent_sampled is False.

          - If either parent_sampled or sample_rate is missing, we generate a random
            value in the range [0, 1).

        The sample_rand is deterministically generated from the trace_id, if present.

        This function does nothing if there is no baggage.
        NÚsample_randr   rA   ©Úintervalz5Could not backfill sample_rand, since parent_sampled=z and sample_rate=ú.ú.6f)r  r   ÚfloatÚsentry_itemsr\   Ú_sample_rateÚ_sample_rand_rangerü   Ú_generate_sample_randrú   Ú
ValueErrorr   Údebug)r2   rI  Úsample_rateÚlowerr=   s        r3   r%  z$PropagationContext._fill_sample_randµ  s&  € ð& Œ<ÐØˆFå!¥%¨¬Ô)B×)FÒ)FÀ}Ñ)UÔ)UÑVÔVˆØÐ" q¨KÐ';Ð';Ò';Ð';¸!Ò';Ð';Ð';Ð';Ð';àˆFð ×'Ò'Ñ)Ô)ˆÝ)¨$Ô*=¸{ÑKÔK‰ˆˆuð	Ý/°´ÈÐPUÈÐWÑWÔWˆKˆKøÝð 		ð 		ð 		õ
 ŒLð2ÈÔH[ð 2ð 2Ø#.ð2ð 2ð 2ñô ð ð ˆFˆFð		øøøð 7BÐ3GÐ3GˆŒÔ! -Ñ0Ð0Ð0s   Á=B Â*CÃCc                 óR   — | j         €dS | j         j                             d¦  «        S )zAConvenience method to get the sample_rand value from the baggage.NrI  )r  rO  r\   rG   s    r3   Ú_sample_randzPropagationContext._sample_randä  s(   € àŒ<ÐØ�4àŒ|Ô(×,Ò,¨]Ñ;Ô;Ð;r5   úOptional[float]c                 óx   — | j         €dS t          t          | j         j                             d¦  «        ¦  «        S )zAConvenience method to get the sample_rate value from the baggage.NrU  )r  r   rN  rO  r\   rG   s    r3   rP  zPropagationContext._sample_rateë  s2   € àŒ<ÐØ�4å�5 $¤,Ô";×"?Ò"?ÀÑ"NÔ"NÑOÔOÐOr5   )NNNNNN)rú   rn   r  rn   rû   rn   rü   r  r  r  r  r  r/   N)r  r  r/   r  )r/   rV   )r/   r  )r/   r<  )r@  r  r/   N)r  r‘   r/   N©r/   N)r/   rn   ©r/   rY  )rQ   rR   rS   Ú__doc__Ú	__slots__r4   Úclassmethodr,  ÚpropertyrL   rú   Úsetterr  r  r9  r7  r?  r$  rE  rG  r%  rX  rP  rB   r5   r3   r  r  !  sx  € € € € € ðð ð€Ið %)Ø#'Ø*.Ø+/Ø?CØ'+ðHà!ðHð !ðHð (ð	Hð
 )ðHð #=ðHð %ðHð 
ðHð Hð Hð HðB ð#Ø,ð#à	ð#ð #ð #ñ „[ð#ð: ð˜#ð ð ð ñ „Xðð „_ð˜cð  dð ð ð ñ „_ðð ð˜ð ð ð ñ „Xðð „^ð˜Sð  Tð ð ð ñ „^ðð ð=ð =ð =ñ „Xð=ð1 ð 1ð 1ð 1ð 1ðð ð ð ð
/ð /ð /ð /ðð ð ð ð?Ø'7ð?à	ð?ð ?ð ?ð ?ð

˜#ð 
ð 
ð 
ð 
ð-Hð -Hð -Hð -Hð^<ð <ð <ð <ðPð Pð Pð Pð Pð Pr5   r  c                   óB  — e Zd ZdZdZdZ ej        d¦  «        Z	 	 d)ddd	e	d
e
fd„Zeddœ	 	 	 	 	 d*d„¦   «         Zed+d„¦   «         Ze	 	 	 	 d,d„¦   «         Ze	 	 	 	 d-d„¦   «         Zed.d„¦   «         Zd/d „Zd0d!„Zd1d#e
de	fd$„Zede	de	fd%„¦   «         Zd2d'„Zde	fd(„ZdS )3r  aF  
    The W3C Baggage header information (see https://www.w3.org/TR/baggage/).

    Before mutating a `Baggage` object, calling code must check that `mutable` is `True`.
    Mutating a `Baggage` object that has `mutable` set to `False` is not allowed, but
    it is the caller's responsibility to enforce this restriction.
    ©rO  Úthird_party_itemsÚmutablezsentry-z^sentry-r¿   TrO  úDict[str, str]rd  re  c                 ó0   — || _         || _        || _        d S r1   rc  )r2   rO  rd  re  s       r3   r4   zBaggage.__init__  s   € ð )ˆÔØ!2ˆÔØˆŒˆˆr5   N)rX  rì   rn   rX  r/   c                ó  — i }d}d}|rØ|                      d¦  «        D ]Â}d|vrŒt          ¦   «         5  |                     ¦   «         }|                      dd¦  «        \  }}t          j                             |¦  «        r=t          |                      d¦  «        d         ¦  «        }	t          |¦  «        ||	<   d}n||rdnd|z   z  }ddd¦  «         n# 1 swxY w Y   ŒÃ|�t          |¦  «        |d	<   d}t          |||¦  «        S )
zF
        freeze if incoming header already has sentry baggage
        r¿   Trï   ú=rA   r:   FNrI  )rý   r   rñ   r  ÚSENTRY_PREFIX_REGEXr  r
   rL   )
r&  rì   rX  rO  rd  re  Úitemr6   ÚvalÚbaggage_keys
             r3   r"  zBaggage.from_incoming_header  sw  € ð ˆØÐØˆàð 	WØŸš SÑ)Ô)ð Wð W�Ø˜d�?�?Øå0Ñ2Ô2ð Wð WØŸ:š:™<œ<�DØ#Ÿzšz¨#¨qÑ1Ô1‘H�C˜ÝÔ2×8Ò8¸Ñ=Ô=ð WÝ&-¨c¯iªi¸©n¬n¸QÔ.?Ñ&@Ô&@˜Ý4;¸C±L´L˜ [Ñ1Ø"'˜˜à)Ð5FÐ.N¨c¨cÈBÐRVÑ-VÑVÐ)ðWð Wð Wñ Wô Wð Wð Wð Wð Wð Wð Wøøøð Wð Wð Wð Wøð Ð#Ý*-¨lÑ*;Ô*;ˆL˜Ñ'ØˆGå�|Ð%6¸Ñ@Ô@Ð@s   ³BCÃC	ÃC	Úscopeúsentry_sdk.scope.Scoper  c                 ól   — |j         €t          i ¦  «        S t                               |j         ¦  «        S )zC
        Deprecated: use populate_from_propagation_context
        )Ú_propagation_contextr  r;  )r&  rn  s     r3   Úfrom_optionszBaggage.from_options.  s0   € ð
 Ô%Ð-Ý˜2‘;”;Ðå×8Ò8¸Ô9SÑTÔTÐTr5   r'  r  c                 óú  — i }d}d}t          j        ¦   «         }|                     ¦   «         st          |¦  «        S |j        }|j        |d<   |                     d¦  «        r|d         |d<   |                     d¦  «        r|d         |d<   |j        r*|j        j        |d<   |j        j	        r|j        j	        |d<   |                     d¦  «        rt          |d         ¦  «        |d	<   t          |||¦  «        S )
Nr¿   Frú   ÚenvironmentÚreleaseÚ
public_keyÚorg_idrY   rU  )r�   r‚   rÛ   r  rU   rú   r\   Ú
parsed_dsnrv  rw  rL   )r&  r'  rO  rd  re  rŠ   rU   s          r3   r;  z)Baggage.populate_from_propagation_context8  s  € ð *,ˆØÐØˆåÔ&Ñ(Ô(ˆà×ÒÑ!Ô!ð 	)Ý˜<Ñ(Ô(Ð(à”.ˆà#6Ô#?ˆ�ZÑ à�;Š;�}Ñ%Ô%ð 	AØ*1°-Ô*@ˆL˜Ñ'à�;Š;�yÑ!Ô!ð 	9Ø&-¨iÔ&8ˆL˜Ñ#àÔð 	BØ)/Ô):Ô)EˆL˜Ñ&ØÔ Ô'ð BØ)/Ô):Ô)A�˜XÑ&à�;Š;Ð+Ñ,Ô,ð 	MÝ*-¨gÐ6JÔ.KÑ*LÔ*LˆL˜Ñ'å�|Ð%6¸Ñ@Ô@Ð@r5   Útransactionúsentry_sdk.tracing.Transactionc                 ó¼  — t          j        ¦   «         }i }|                     ¦   «         st          |¦  «        S |j        pi }|j        |d<   |j        d›|d<   |                     d¦  «        r|d         |d<   |                     d¦  «        r|d         |d<   |j        r*|j        j	        |d<   |j        j
        r|j        j
        |d<   |j        r|j        t          vr
|j        |d<   |j        �t          |j        ¦  «        |d
<   |j        �|j        rdnd|d<   |j        r+|j        j        r|                     |j        j        ¦  «         t          |d¬¦  «        S )ú�
        Populate fresh baggage entry with sentry_items and make it immutable
        if this is the head SDK which originates traces.
        rú   rM  rI  rt  ru  rv  rw  ry  NrU  ÚtrueÚfalseÚsampledF©re  )r�   r‚   rÛ   r  rU   rú   rX  r\   rx  rv  rw  r}   ÚsourceÚLOW_QUALITY_TRANSACTION_SOURCESrU  rL   r  Ú_baggagerO  r$  )r&  ry  rŠ   rO  rU   s        r3   Úpopulate_from_transactionz!Baggage.populate_from_transactionY  s–  € õ Ô&Ñ(Ô(ˆØ)+ˆà×ÒÑ!Ô!ð 	)Ý˜<Ñ(Ô(Ð(à”.Ð& Bˆà#.Ô#7ˆ�ZÑ Ø)4Ô)AÐ&GÐ&Gˆ�]Ñ#à�;Š;�}Ñ%Ô%ð 	AØ*1°-Ô*@ˆL˜Ñ'à�;Š;�yÑ!Ô!ð 	9Ø&-¨iÔ&8ˆL˜Ñ#àÔð 	BØ)/Ô):Ô)EˆL˜Ñ&ØÔ Ô'ð BØ)/Ô):Ô)A�˜XÑ&ð Ôð	;àÔ"Õ*IÐIÐIà*5Ô*:ˆL˜Ñ'àÔ"Ð.Ý*-¨kÔ.EÑ*FÔ*FˆL˜Ñ'àÔÐ*Ø0;Ô0CÐ&P f fÈˆL˜Ñ#ð
 Ôð 	C KÔ$8Ô$Eð 	CØ×Ò Ô 4Ô AÑBÔBÐBå�|¨UÐ3Ñ3Ô3Ð3r5   ÚsegmentrÞ   c                 ó
  — t          j        ¦   «         }i }|                     ¦   «         st          |¦  «        S |j        pi }|j        |d<   |j        �|j        d›|d<   |                     d¦  «        r|d         |d<   |                     d¦  «        r|d         |d<   |j        r*|j        j	        |d<   |j        j
        r|j        j
        |d<   |                     ¦   «                              d	¦  «        t          vr|j        r
|j        |d
<   |j        �t          |j        ¦  «        |d<   |j        �|j        rdnd|d<   |j        r+|j        j        r|                     |j        j        ¦  «         t          |d¬¦  «        S )r|  rú   NrM  rI  rt  ru  rv  rw  úsentry.segment.name.sourcery  rU  r}  r~  r  Fr€  )r�   r‚   rÛ   r  rU   rú   rX  r\   rx  rv  rw  Úget_attributesÚLOW_QUALITY_SEGMENT_SOURCESr}   rP  rL   r  rƒ  rO  r$  )r&  r…  rŠ   rO  rU   s        r3   Úpopulate_from_segmentzBaggage.populate_from_segment‹  s·  € õ Ô&Ñ(Ô(ˆØ)+ˆà×ÒÑ!Ô!ð 	)Ý˜<Ñ(Ô(Ð(à”.Ð& Bˆà#*Ô#3ˆ�ZÑ ØÔÐ+Ø-4Ô-AÐ*GÐ*GˆL˜Ñ'à�;Š;�}Ñ%Ô%ð 	AØ*1°-Ô*@ˆL˜Ñ'à�;Š;�yÑ!Ô!ð 	9Ø&-¨iÔ&8ˆL˜Ñ#àÔð 	BØ)/Ô):Ô)EˆL˜Ñ&ØÔ Ô'ð BØ)/Ô):Ô)A�˜XÑ&ð ×"Ò"Ñ$Ô$×(Ò(Ð)EÑFÔFÝ.ð/ð /àŒlð/ð +2¬,ˆL˜Ñ'àÔÐ+Ý*-¨gÔ.BÑ*CÔ*CˆL˜Ñ'àŒ?Ð&Ø07´Ð&L f fÀWˆL˜Ñ#ð Ôð 	? Ô 0Ô =ð 	?Ø×Ò Ô 0Ô =Ñ>Ô>Ð>å�|¨UÐ3Ñ3Ô3Ð3r5   c                 ó   — d| _         d S ©NFr€  rG   s    r3   ÚfreezezBaggage.freeze½  s   € ØˆŒˆˆr5   c                 óR   — i }| j                              ¦   «         D ]
\  }}|||<   Œ|S r1   )rO  rˆ   )r2   rì   r6   rk  s       r3   r  z Baggage.dynamic_sampling_contextÀ  s9   € ØˆàÔ*×0Ò0Ñ2Ô2ð 	ð 	‰IˆC�ØˆF�3‰KˆKàˆr5   FÚinclude_third_partyc                 ó”  — g }| j                              ¦   «         D ]|\  }}t          ¦   «         5  t          j        t          |¦  «        z   dz   t          t          |¦  «        ¦  «        z   }|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   Œ}|r|                     | j        ¦  «         d 	                    |¦  «        S )Nri  rï   )
rO  rˆ   r   r  ÚSENTRY_PREFIXr	   rL   Úappendrd  Újoin)r2   r�  rˆ   r6   rl  rk  s         r3   r>  zBaggage.serializeÈ  sõ   € ØˆàÔ)×/Ò/Ñ1Ô1ð 	#ð 	#‰HˆC�Ý,Ñ.Ô.ð #ð #ÝÔ,­u°S©z¬zÑ9¸CÑ?Å%ÍÈCÉÌÁ/Ä/ÑQ�Ø—’˜TÑ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #øð ð 	1Ø�LŠL˜Ô/Ñ0Ô0Ð0à�xŠx˜‰ŒÐs   ¯ABÂB	ÂB	c                 óf   — d                      d„ |                      d¦  «        D ¦   «         ¦  «        S )z™Remove Sentry baggage from the given header.

        Given a Baggage header, return a new Baggage header with all Sentry baggage items removed.
        rï   c              3   ó|   K  — | ]7}t           j                             |                     ¦   «         ¦  «        °3|V — Œ8d S r1   )r  rj  r  rñ   )rC   rk  s     r3   rD   z/Baggage.strip_sentry_baggage.<locals>.<genexpr>Ü  sU   è è € ð ð àÝÔ2×8Ò8¸¿º¹¼ÑFÔFðØðð ð ð ð ð r5   )r“  rý   )rì   s    r3   Ústrip_sentry_baggagezBaggage.strip_sentry_baggageÕ  sB   € ð �xŠxðð à"ŸLšL¨Ñ-Ô-ðñ ô ñ
ô 
ð 	
r5   rY  c                 óˆ   — t          t          | j                             d¦  «        ¦  «        }|�d|cxk    rdk     rn n|S dS )zçConvenience method to get the sample_rand value from the sentry_items.

        We validate the value and parse it as a float before returning it. The value is considered
        valid if it is a float in the range [0, 1).
        rI  Nç        ç      ð?)r   rN  rO  r\   )r2   rI  s     r3   rX  zBaggage._sample_randã  sV   € õ "¥%¨Ô):×)>Ò)>¸}Ñ)MÔ)MÑNÔNˆàÐ" s¨kÐ'?Ð'?Ò'?Ð'?¸CÒ'?Ð'?Ð'?Ð'?Ð'?ØÐàˆtr5   c                 óF   — d|                       d¬¦  «        › d| j        › d�S )Nz
<Baggage "T)r�  z", mutable=ú>)r>  re  rG   s    r3   rG  zBaggage.__repr__ð  s-   € Ø`˜DŸNšN¸t˜NÑDÔDÐ`Ð`ÐQUÔQ]Ð`Ð`Ð`Ð`r5   )r¿   T)rì   rn   rX  rn   r/   r  )rn  ro  r/   r  )r'  r  r/   r  )ry  rz  r/   r  )r…  rÞ   r/   r  r[  )r/   rf  )Fr\  )rQ   rR   rS   r]  r^  r‘  ÚreÚcompilerj  rL   r[   r4   r_  r"  rr  r;  r„  rŠ  r�  r  r>  Ústaticmethodr–  rX  rG  rB   r5   r3   r  r  ó  s)  € € € € € ðð ð A€Ià€MØ$˜"œ* ZÑ0Ô0Ðð
 "$Øð	ð à&ðð ðð ð	ð ð ð ð ð
 )-ð	 Að  Aàð Að &ð	 Að
 
ð Að  Að  Añ „[ð AðD ðUð Uð Uñ „[ðUð ðAØ"6ðAà	ðAð Að Añ „[ðAð@ ð/4Ø:ð/4à	ð/4ð /4ð /4ñ „[ð/4ðb ð/4ð /4ð /4ñ „[ð/4ðbð ð ð ðð ð ð ðð ¨Tð ¸cð ð ð ð ð ð
 Sð 
¨Sð 
ð 
ð 
ñ „\ð
ðð ð ð ða˜#ð að að að að að ar5   r  r¥   c                 ód   — | j         d         }t          | |¦  «        rdS t          ||d¬¦  «        S )zy
    Returns True if url matches trace_propagation_targets configured in the given client. Otherwise, returns False.
    Útrace_propagation_targetsFT)Úsubstring_matching)rU   r   r   )rŠ   r¥   r   s      r3   Úshould_propagate_tracer¢  ô  s?   € ð !'¤Ð/JÔ KÐå�V˜SÑ!Ô!ð Øˆuå˜CÐ!:ÈtÐTÑTÔTÐTr5   Úrequestc           
      ó¬  — t          |d¦  «        rt          |d¦  «        st          j        d¦  «         dS t          | t	          |j        ¦  «        ¦  «        sdS t          j        ¦   «                              ¦   «         D ]S\  }}t          j	        d|› d|› d|j        › d�¦  «         |t          k    rt          |j        |¦  «         ŒI||j        |<   ŒTdS )	ai  
    Attach Sentry trace propagation headers (``sentry-trace``/``baggage``) from the
    current scope's propagation context to an outgoing request, if the request's
    URL matches the configured ``trace_propagation_targets``.

    ``request`` is expected to expose ``url`` and a mutable ``headers`` mapping
    (e.g. an ``httpx``/``httpx2`` ``Request``).
    r¥   ÚheaderszPUnable to propagate trace headers in request - missing url or headers attributesNz[Tracing] Adding `z	` header z to outgoing request to rL  )r	  r   r”   r¢  rL   r¥   r�   Úget_current_scopeÚiter_trace_propagation_headersrT  r!  Úadd_sentry_baggage_to_headersr¥  )rŠ   r£  r6   r1  s       r3   Úpropagate_trace_headersr©     sþ   € õ �7˜EÑ"Ô"ð ­'°'¸9Ñ*EÔ*Eð ÝŒØ^ñ	
ô 	
ð 	
ð 	ˆå! &­#¨g¬kÑ*:Ô*:Ñ;Ô;ð Øˆå Ô2Ñ4Ô4×SÒSÑUÔUð )ð )‰
ˆˆUÝŒØ\ Ð\Ð\¨uÐ\Ð\ÈgÌkÐ\Ð\Ð\ñ	
ô 	
ð 	
ð Õ%Ò%Ð%Ý)¨'¬/¸5ÑAÔAÐAÐAà#(ˆGŒO˜CÑ Ð ð)ð )r5   r  r  c                 óÖ   — i }|                       ¦   «         D ]Q\  }}|                     d¦  «        r
|dd…         }|                     dd¦  «                             ¦   «         }|||<   ŒR|S )z…
    Normalizes incoming data so the keys are all lowercase with dashes instead of underscores and stripped from known prefixes.
    r,   é   Nr;   r:   )rˆ   rM   r<   rV  )r  r{   r6   r1  s       r3   r  r    sx   € ð €DØ#×)Ò)Ñ+Ô+ð ð ‰
ˆˆUØ�>Š>˜'Ñ"Ô"ð 	Ø�a�b�b”'ˆCà�kŠk˜#˜sÑ#Ô#×)Ò)Ñ+Ô+ˆØˆˆS‰	ˆ	à€Kr5   r   úOptional[Union[str, OP]]r}   r~   Útemplater   c                 ó    ‡ ‡‡‡— dˆˆˆ ˆfd„}|S )aé  
    Create a span decorator that can wrap both sync and async functions.

    :param op: The operation type for the span.
    :type op: str or :py:class:`sentry_sdk.consts.OP` or None
    :param name: The name of the span.
    :type name: str or None
    :param attributes: Additional attributes to set on the span.
    :type attributes: dict or None
    :param template: The type of span to create. This determines what kind of
        span instrumentation and data collection will be applied. Use predefined
        constants from :py:class:`sentry_sdk.consts.SPANTEMPLATE`.
        The default is `SPANTEMPLATE.DEFAULT` which is the right choice for most
        use cases.
    :type template: :py:class:`sentry_sdk.consts.SPANTEMPLATE`
    Úfr    r/   c                 ór  •‡ — t          j        ‰ ¦  «        dˆˆ ˆˆˆfd„¦   «         }	 t          j        ‰ ¦  «        |_        n# t
          $ r Y nw xY wt          j        ‰ ¦  «        dˆˆ ˆˆˆfd„¦   «         }	 t          j        ‰ ¦  «        |_        n# t
          $ r Y nw xY wt          j        ‰ ¦  «        r|S |S )	úD
        Decorator to create a span for the given function.
        Úargsr    r™   r/   c            
   Ÿ   óª  •K  — t          ¦   «         }|€0t          j        dt          ‰¦  «        ¦  «          ‰| i |¤Žƒ d {V —†S t	          |t
          ¦  «        r*t          j        dt          d¬¦  «          ‰| i |¤Žƒ d {V —†S ‰pt          ‰¦  «        }‰pt          ‰¦  «        pd}t          ‰||¦  «        }t          d¦  «        }t          d¦  «        }|                     ||¬¦  «        5 }|                     ‰
pi ¦  «         t          |‰||‰| |¦  «          ‰| i |¤Žƒ d {V —†}	t          |‰||	¦  «         |	cd d d ¦  «         S # 1 swxY w Y   d S ©	NzbCannot create a child span for %s. Please start a Sentry transaction before calling this function.zBUse the @sentry_sdk.traces.trace decorator in span streaming mode.é   ©Ú
stacklevelr¿   ÚinputsÚoutputs)r   r}   ©Úget_current_spanr   rT  r   rK   rÞ   ÚwarningsÚwarnÚDeprecationWarningÚ_get_span_opÚ_get_span_nameÚ_should_collect_gen_aiÚstart_childÚupdate_dataÚ_set_input_attributesÚ_set_output_attributes©r²  r™   Úcurrent_spanÚspan_opÚfunction_nameÚ	span_nameÚcollect_inputsÚcollect_outputsrŒ   Úresultr~   r¯  r}   r   r­  s             €€€€€r3   Úasync_wrapperzDcreate_span_decorator.<locals>.span_decorator.<locals>.async_wrapperJ  s  øè è € å+Ñ-Ô-ˆLàÐ#Ý”ðVå*¨1Ñ-Ô-ñô ð ð
 ˜Q Ð/¨Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/å˜,­Ñ5Ô5ð 0Ý”ØXÝ&Ø ðñ ô ð ð
 ˜Q Ð/¨Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/àÐ2�L¨Ñ2Ô2ˆGØ ÐCÕ$:¸1Ñ$=Ô$=ÐCÀˆMÝ& x°ÀÑGÔGˆIÝ3°HÑ=Ô=ˆNÝ4°YÑ?Ô?ˆOà×)Ò)ØØð *ñ ô ð ð Ø× Ò  Ð!1¨rÑ2Ô2Ð2Ý%Ø˜( N°MÀ1ÀdÈFñô ð ð  !˜q $Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1�å& t¨X°ÈÑOÔOÐOàðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   Ã-AEÅEÅEc            
      ó‚  •— t          ¦   «         }|€*t          j        dt          ‰¦  «        ¦  «          ‰| i |¤ŽS t	          |t
          ¦  «        r$t          j        dt          d¬¦  «          ‰| i |¤ŽS ‰pt          ‰¦  «        }‰pt          ‰¦  «        pd}t          ‰||¦  «        }t          d¦  «        }t          d¦  «        }|                     ||¬¦  «        5 }|                     ‰
pi ¦  «         t          |‰||‰| |¦  «          ‰| i |¤Ž}	t          |‰||	¦  «         |	cd d d ¦  «         S # 1 swxY w Y   d S r´  rº  rÆ  s             €€€€€r3   Úsync_wrapperzCcreate_span_decorator.<locals>.span_decorator.<locals>.sync_wrapperx  sÜ  ø€ å+Ñ-Ô-ˆLàÐ#Ý”ðVå*¨1Ñ-Ô-ñô ð ð
 �q˜$Ð) &Ð)Ð)Ð)å˜,­Ñ5Ô5ð *Ý”ØXÝ&Ø ðñ ô ð ð
 �q˜$Ð) &Ð)Ð)Ð)àÐ2�L¨Ñ2Ô2ˆGØ ÐCÕ$:¸1Ñ$=Ô$=ÐCÀˆMÝ& x°ÀÑGÔGˆIÝ3°HÑ=Ô=ˆNÝ4°YÑ?Ô?ˆOà×)Ò)ØØð *ñ ô ð ð Ø× Ò  Ð!1¨rÑ2Ô2Ð2Ý%Ø˜( N°MÀ1ÀdÈFñô ð ð ˜˜DÐ+ FÐ+Ð+�å& t¨X°ÈÑOÔOÐOàðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÃAD4Ä4D8Ä;D8N©r²  r    r™   r    r/   r    )Ú	functoolsÚwrapsÚinspectÚ	signatureÚ__signature__r°   Úiscoroutinefunction)r¯  rÎ  rÐ  r~   r}   r   r­  s   `  €€€€r3   Úspan_decoratorz-create_span_decorator.<locals>.span_decoratorE  s/  øø€ õ
 
Œ˜Ñ	Ô	ð&	ð &	ð &	ð &	ð &	ð &	ð &	ð &	ð &	ñ 
Ô	ð&	ðP	Ý*1Ô*;¸AÑ*>Ô*>ˆMÔ'Ð'øÝð 	ð 	ð 	ØˆDð	øøøõ 
Œ˜Ñ	Ô	ð&	ð &	ð &	ð &	ð &	ð &	ð &	ð &	ð &	ñ 
Ô	ð&	ðP	Ý)0Ô):¸1Ñ)=Ô)=ˆLÔ&Ð&øÝð 	ð 	ð 	ØˆDð	øøøõ Ô& qÑ)Ô)ð 	 Ø Ð àÐs#   ¨A Á
AÁAÁ7B Â
BÂB©r¯  r    r/   r    rB   )r   r}   r~   r­  rØ  s   ```` r3   Úcreate_span_decoratorrÚ  .  sE   øøøø€ ð.d ð d ð d ð d ð d ð d ð d ð d ð d ðL Ðr5   TÚactivec                 ó   ‡ ‡‡— dˆˆˆ fd„}|S )zW
    Create a span creating decorator that can wrap both sync and async functions.
    r¯  r    r/   c                 ó¼  •‡ ‡— ‰rt          ‰¦  «        ni Šd‰vrt          j        ‰d<   t          j        ‰ ¦  «        d	ˆˆ ˆˆfd„¦   «         }	 t          j        ‰ ¦  «        |_        n# t          $ r Y nw xY wt          j        ‰ ¦  «        d	ˆˆ ˆˆfd„¦   «         }	 t          j        ‰ ¦  «        |_        n# t          $ r Y nw xY wt          j	        ‰ ¦  «        r|S |S )
r±  r|   r²  r    r™   r/   c               Ÿ   óH  •K  — t          j        ¦   «         }|                     ¦   «         r*t          |j        ¦  «        st          j        dd¬¦  «         ‰pt          ‰¦  «        pd}t          |‰‰¬¦  «        5   ‰| i |¤Žƒ d {V —†}|cd d d ¦  «         S # 1 swxY w Y   d S ©NzSUsing span streaming API in non-span-streaming mode. Use @sentry_sdk.trace instead.rµ  r¶  r¿   )r}   r~   rÛ  ©	r�   r‚   rÛ   re   rU   r¼  r½  r   Ústart_streaming_span)	r²  r™   rŠ   rÊ  rÍ  rÛ  r¯  r}   Únew_attributess	        €€€€r3   rÎ  zNcreate_streaming_span_decorator.<locals>.span_decorator.<locals>.async_wrapper¿  s!  øè è € åÔ*Ñ,Ô,ˆFØ×ÒÑ!Ô!ð Õ*DÀVÄ^Ñ*TÔ*Tð Ý”ð1à ðñ ô ð ð Ð?Õ 6°qÑ 9Ô 9Ð?¸RˆIå%Ø¨>À&ðñ ô ð ð ð  !˜q $Ð1¨&Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1�Øð	ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á:BÂBÂBc                  ó4  •— t          j        ¦   «         }|                     ¦   «         r*t          |j        ¦  «        st          j        dd¬¦  «         ‰pt          ‰¦  «        pd}t          |‰‰¬¦  «        5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S rß  rà  )r²  r™   rŠ   rÊ  rÛ  r¯  r}   râ  s       €€€€r3   rÐ  zMcreate_streaming_span_decorator.<locals>.span_decorator.<locals>.sync_wrapperÖ  s  ø€ åÔ*Ñ,Ô,ˆFØ×ÒÑ!Ô!ð Õ*DÀVÄ^Ñ*TÔ*Tð Ý”ð1à ðñ ô ð ð Ð?Õ 6°qÑ 9Ô 9Ð?¸RˆIå%Ø¨>À&ðñ ô ð *ð *ð �q˜$Ð) &Ð)Ð)ð*ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *s   Á8BÂBÂBNrÑ  )
Údictr   ÚFUNCTIONrÒ  rÓ  rÔ  rÕ  rÖ  r°   r×  )r¯  rÎ  rÐ  râ  rÛ  r~   r}   s   `  @€€€r3   rØ  z7create_streaming_span_decorator.<locals>.span_decorator·  sR  øøø€ ð .8Ð?�˜jÑ)Ô)Ð)¸RˆØ˜nÐ,Ð,Ý*,¬+ˆN˜;Ñ'å	Œ˜Ñ	Ô	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð"	Ý*1Ô*;¸AÑ*>Ô*>ˆMÔ'Ð'øÝð 	ð 	ð 	ØˆDð	øøøõ 
Œ˜Ñ	Ô	ð	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*ñ 
Ô	ð	*ð 	Ý)0Ô):¸1Ñ)=Ô)=ˆLÔ&Ð&øÝð 	ð 	ð 	ØˆDð	øøøõ Ô& qÑ)Ô)ð 	 Ø Ð àÐs$   ÁA( Á(
A5Á4A5ÂB6 Â6
CÃCrÙ  rB   )r}   r~   rÛ  rØ  s   ``` r3   Úcreate_streaming_span_decoratorræ  ®  s6   øøø€ ð8 ð 8 ð 8 ð 8 ð 8 ð 8 ð 8 ð 8 ðt Ðr5   rn  úOptional[sentry_sdk.Scope]úOptional[Span]c                 ó>   — | pt          j        ¦   «         } | j        }|S )zU
    Returns the currently active span if there is one running, otherwise `None`
    )r�   r¦  rŒ   )rn  rÇ  s     r3   r»  r»  ô  s$   € ð Ð3•ZÔ1Ñ3Ô3€EØ”:€LØÐr5   ©r˜  r™  rJ  rú   rK  útuple[float, float]c                óú   — |\  }}||k     st          d¦  «        ‚t          | ¦  «        }t          |dz  ¦  «        }t          |dz  ¦  «        }	 |                     ||¦  «        }n# t           $ r |}Y nw xY w|dz  S )a�  Generate a sample_rand value from a trace ID.

    The generated value will be pseudorandomly chosen from the provided
    interval. Specifically, given (lower, upper) = interval, the generated
    value will be in the range [lower, upper). The value has 6-digit precision,
    so when printing with .6f, the value will never be rounded up.

    The pseudorandom number generator is seeded with the trace ID.
    z/Invalid interval: lower must be less than upperi@B )rS  r   rT   Ú	randrange)rú   rK  rV  r=   ÚrngÚlower_scaledÚupper_scaledÚsample_rand_scaleds           r3   rR  rR  ÿ  s¨   € ð �L€Eˆ5Ø�5Š=ˆ=ÝÐJÑKÔKÐKå
�Ñ
Ô
€CÝ�u˜yÑ(Ñ)Ô)€LÝ�u˜yÑ(Ñ)Ô)€Lð*Ø Ÿ]š]¨<¸ÑFÔFÐÐøÝð *ð *ð *ð *ÐÐÐð*øøøð
  	Ñ)Ð)s   ÁA& Á&A5Á4A5rü   r  rU  rY  c                 ó&   — | �|€dS | du rd|fS |dfS )zÇ
    Compute the lower (inclusive) and upper (exclusive) bounds of the range of values
    that a generated sample_rand value must fall into, given the parent_sampled and
    sample_rate values.
    Nrê  Tr˜  r™  rB   )rü   rU  s     r3   rQ  rQ    s5   € ð Ð Ð!4ØˆxØ	˜4Ð	Ð	Ø�KÐÐà˜CÐÐr5   r�  r6   r7   c                 óÈ   — d}t          | t          ¦  «        r|                      |¦  «        }n4t          | |¦  «        r$	 t	          | |¦  «        }n# t
          $ r d}Y nw xY w|S )z�
    Gets a value from a source object. The source can be a dict or an object.
    It is checked for dictionary keys and object attributes.
    N)rK   rä  r\   r	  Úgetattrr°   )r�  r6   r1  s      r3   Ú
_get_valuerõ  .  s}   € ð
 €EÝ�&�$ÑÔð Ø—
’
˜3‘”ˆˆå�6˜3ÑÔð 	ðÝ ¨Ñ,Ô,��øÝð ð ð Ø���ðøøøà€Ls   ¿A ÁAÁAzUnion[str, SPANTEMPLATE]r™   c                 ó  — |}| t           j        k    rMd}|r?dD ]<}|                     |¦  «        r%t          ||         t          ¦  «        r
||         } nŒ=|rd|› �nd}n+| t           j        k    rd|› �}n| t           j        k    rd|› �}|S )zF
    Get the name of the span based on the template and the name.
    N)ÚmodelÚ
model_namezchat Úchatzinvoke_agent zexecute_tool )r   ÚAI_CHATr\   rK   rL   ÚAI_AGENTÚAI_TOOL)r­  r}   r™   rÊ  r÷  r6   s         r3   rÀ  rÀ  ?  s½   € ð €Ià•<Ô'Ò'Ð'ØˆØð 	Ø.ð ð �Ø—:’:˜c‘?”?ð ¥z°&¸´+½sÑ'CÔ'Cð Ø" 3œK�EØ�Eøà',Ð8�O˜E�O�O�O°&ˆ	ˆ	à	•\Ô*Ò	*Ð	*Ø* DÐ*Ð*ˆ	ˆ	à	•\Ô)Ò	)Ð	)Ø* DÐ*Ð*ˆ	àÐr5   c                 óè   — t           j        t          j        t           j        t          j        t           j        t          j        i}|                     | t          j	        ¦  «        }t          |¦  «        S )z>
    Get the operation of the span based on the template.
    )r   rú  r   ÚGEN_AI_CHATrû  ÚGEN_AI_INVOKE_AGENTrü  ÚGEN_AI_EXECUTE_TOOLr\   rå  rL   )r­  Úmappingr   s      r3   r¿  r¿  \  sN   € õ
 	Ô�bœnÝÔ�rÔ5ÝÔ�bÔ4ðA€Gð
 
�Š�X�rœ{Ñ	+Ô	+€Båˆr‰7Œ7€Nr5   ÚkindzLiteral["inputs", "outputs"]c                 óÄ   — t          j        ¦   «         }t          |j        ¦  «        r&t	          |j        d         d         |          ¦  «        S |                     ¦   «         S )Nrt   Úgen_ai)r�   r‚   r   rU   r[   r¤   )r  rŠ   s     r3   rÁ  rÁ  o  sU   € ÝÔ"Ñ$Ô$€FÝ" 6¤>Ñ2Ô2ð GÝ�F”NÐ#4Ô5°hÔ?ÀÔEÑFÔFÐFà×)Ò)Ñ+Ô+Ð+r5   rË  r²  ztuple[Any, ...]c                 óü  ‡	‡
— i Š	| t           v �r‚t          j        t          ft          j        t          ft          j        t          ft          j        t          ft          j        t          ft          j        t          ft          j	        t          ft          j
        t          ft          j        t          ft          j        t          fdœ
Š
dt          ddddfˆ	ˆ
fd„}d}t          t          j        ¦   «         j        ¦  «        r|}d	d
dœ}t#          |                     ¦   «         ¦  «        D ]i\  }}||v rT|rQt'          |t          ¦  «        r<‰	                     t          j        g ¦  «                             ||         |dœ¦  «         Œ] |||¦  «         Œj| t.          j        k    r!|rt3          ||dœ¦  «        ‰	t          j        <   t          j        ‰	v r,t3          ‰	t          j                 ¦  «        ‰	t          j        <   ‰	S )z;
    Get input attributes for the given span template.
    )
r÷  rø  ÚagentÚ
agent_nameÚ
max_tokensÚfrequency_penaltyÚpresence_penaltyÚtemperatureÚtop_pÚtop_kr6   r1  r    r/   Nc                 ó`   •— | ‰v r$‰|          \  }}|�t          ||¦  «        r|‰|<   d S d S d S d S r1   )rK   )r6   r1  Ú	attributeÚ	data_typer~   r  s       €€r3   Ú_set_from_keyz,_get_input_attributes.<locals>._set_from_key�  sR   ø€ Ø�gˆ~ˆ~Ø)0°¬Ñ&�˜IØÐ$­°E¸9Ñ)EÔ)EÐ$Ø,1�J˜yÑ)Ð)Ð)ð ˆ~à$Ð$Ð$Ð$r5   TÚuserÚsystem)ÚpromptÚsystem_prompt)ÚroleÚcontent)r²  r™   )Ú_AI_TEMPLATESr   ÚGEN_AI_REQUEST_MODELrL   ÚGEN_AI_AGENT_NAMEÚGEN_AI_REQUEST_MAX_TOKENSrT   Ú GEN_AI_REQUEST_FREQUENCY_PENALTYrN  ÚGEN_AI_REQUEST_PRESENCE_PENALTYÚGEN_AI_REQUEST_TEMPERATUREÚGEN_AI_REQUEST_TOP_PÚGEN_AI_REQUEST_TOP_Kr   r�   r‚   rU   Úlistrˆ   rK   Ú
setdefaultÚGEN_AI_REQUEST_MESSAGESr’  r   rü  r   ÚGEN_AI_TOOL_INPUT)r­  rË  r²  r™   r  Úcollect_messagesÚrolesr6   r1  r~   r  s            @@r3   Ú_get_input_attributesr'  w  s  øø€ ð $&€Jà•=Ð Ñ åÔ3µSÐ9Ý#Ô8½#Ð>ÝÔ0µ#Ð6Ý#Ô5µsÐ;Ý#Ô=½sÐCÝ"*Ô"KÍUÐ!SÝ!)Ô!IÍ5Ð QÝ$Ô?ÅÐGÝÔ3µUÐ;ÝÔ3µSÐ9ð
ð 
ˆð	2�sð 	2¨5ð 	2°Tð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð  ÐÝ&¥zÔ'<Ñ'>Ô'>Ô'FÑGÔGð 	.Ø-Ðà!°HÐ=Ð=ˆå˜vŸ|š|™~œ~Ñ.Ô.ð 	&ð 	&‰JˆC�Ø�eˆ|ˆ|Ø#ð ­
°5½#Ñ(>Ô(>ð Ø×)Ò)­(Ô*JÈBÑOÔO×VÒVØ!& s¤¸Ð>Ð>ñô ð ð àˆM˜#˜uÑ%Ô%Ð%Ð%à•<Ô'Ò'Ð'¨NÐ'Ý1:Ø VÐ,Ð,ñ2
ô 2
ˆ
•8Ô-Ñ.õ
 Ô'¨:Ð5Ð5Ý7@Ø•xÔ7Ô8ñ8
ô 8
ˆ
•8Ô3Ñ4ð Ðr5   Úusagec                 ó¶   ‡ ‡— i Šdt           ddddfˆˆ fd„} |t          j        d¦  «          |t          j        d¦  «          |t          j        d	¦  «         ‰S )
z
    Get usage attributes.
    r  Úkeysztuple[str, ...]r/   Nc                 ój   •— |D ].}t          ‰|¦  «        }|�t          |t          ¦  «        r|‰| <   Œ/d S r1   )rõ  rK   rT   )r  r*  r6   r1  r~   r(  s       €€r3   Ú_set_from_keysz-_get_usage_attributes.<locals>._set_from_keys¼  sK   ø€ Øð 	.ð 	.ˆCÝ˜u cÑ*Ô*ˆEØÐ ¥Z°µsÑ%;Ô%;Ð Ø(-�
˜9Ñ%øð	.ð 	.r5   )Úprompt_tokensÚinput_tokens)Úcompletion_tokensÚoutput_tokens)Útotal_tokens)rL   r   ÚGEN_AI_USAGE_INPUT_TOKENSÚGEN_AI_USAGE_OUTPUT_TOKENSÚGEN_AI_USAGE_TOTAL_TOKENS)r(  r,  r~   s   ` @r3   Ú_get_usage_attributesr5  ¶  s©   øø€ ð €Jð.¥#ð .Ð->ð .À4ð .ð .ð .ð .ð .ð .ð .ð €NÝÔ*Ø)ñô ð ð €NÝÔ+Ø.ñô ð ð €NÝÔ*Øñô ð ð
 Ðr5   rÌ  rÍ  c                 óª  — i }| t           v �rt          ¦   «         5  |g}t          |d¦  «        }|                     |¦  «         t          |d¦  «        }t          |d¦  «        }|                     |¦  «         |D ]&}|�"|                     t          |¦  «        ¦  «         Œ't          |d¦  «        }|�$t          |t          ¦  «        r||t          j	        <   t          |d¦  «        }|�$t          |t          ¦  «        r||t          j	        <   ddd¦  «         n# 1 swxY w Y   | t          j        k    r|rt          |¦  «        |t          j        <   |S )z<
    Get output attributes for the given span template.
    r(  ÚmetadataNr÷  rø  )r  r   rõ  r’  r$  r5  rK   rL   r   ÚGEN_AI_RESPONSE_MODELr   rü  r   ÚGEN_AI_TOOL_OUTPUT)	r­  rÌ  rÍ  r~   Úusage_candidatesr(  ÚmetaÚusage_candidaterø  s	            r3   Ú_get_output_attributesr=  Ò  s¬  € ð $&€Jà•=Ð Ñ Ý(Ñ*Ô*ð 	Hð 	Hà &˜xÐå˜v wÑ/Ô/ˆEØ×#Ò# EÑ*Ô*Ð*å˜f jÑ1Ô1ˆDÝ˜t WÑ-Ô-ˆEØ×#Ò# EÑ*Ô*Ð*à#3ð Nð N�Ø"Ð.Ø×%Ò%Õ&;¸OÑ&LÔ&LÑMÔMÐMøõ $ F¨GÑ4Ô4ˆJØÐ%­*°ZÅÑ*EÔ*EÐ%Ø=G�
�8Ô9Ñ:å# F¨LÑ9Ô9ˆJØÐ%­*°ZÅÑ*EÔ*EÐ%Ø=G�
�8Ô9Ñ:ð-	Hð 	Hð 	Hñ 	Hô 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Høøøð 	Hð 	Hð 	Hð 	Hð2 •<Ô'Ò'Ð'¨OÐ'Ý2;¸FÑ2CÔ2Cˆ
•8Ô.Ñ/àÐs   ›C3DÄDÄ!DrÅ   r¯  c                 óš  — i }|t           j        k    rt          j        dt          j        |i}na|t           j        k    rt          j        di}nB|t           j        k    r2t          j        dt          j        |i}|j        }|�||t          j	        <   | 
                    t          ||||¦  «        ¦  «         |                      |pi ¦  «         dS )aŸ  
    Set span input attributes based on the given span template.

    :param span: The span to set attributes on.
    :param template: The template to use to set attributes on the span.
    :param collect_inputs: Whether gen_ai inputs may be collected.
    :param f: The wrapped function.
    :param args: The arguments to the wrapped function.
    :param kwargs: The keyword arguments to the wrapped function.
    Úinvoke_agentrù  Úexecute_toolN)r   rû  r   ÚGEN_AI_OPERATION_NAMEr  rú  rü  ÚGEN_AI_TOOL_NAMEr]  ÚGEN_AI_TOOL_DESCRIPTIONr$  r'  rÃ  )	rŒ   r­  rË  r}   r¯  r²  r™   r~   Ú	docstrings	            r3   rÄ  rÄ  ú  sÖ   € ð& $&€Jà•<Ô(Ò(Ð(åÔ*¨NÝÔ&¨ð
ˆ
ˆ
ð 
•\Ô)Ò	)Ð	)åÔ*¨Fð
ˆ
ˆ
ð 
•\Ô)Ò	)Ð	)åÔ*¨NÝÔ% tð
ˆ
ð
 ”Iˆ	ØÐ Ø;DˆJ•xÔ7Ñ8à×ÒÕ+¨H°nÀdÈFÑSÔSÑTÔTÐTØ×Ò�ZÐ% 2Ñ&Ô&Ð&Ð&Ð&r5   c                 óR   — |                       t          |||¦  «        pi ¦  «         dS )a;  
    Set span output attributes based on the given span template.

    :param span: The span to set attributes on.
    :param template: The template to use to set attributes on the span.
    :param collect_outputs: Whether gen_ai outputs may be collected.
    :param result: The result of the wrapped function.
    N)rÃ  r=  )rŒ   r­  rÌ  rÍ  s       r3   rÅ  rÅ  &  s1   € ð 	×ÒÕ+¨H°oÀvÑNÔNÐTÐRTÑUÔUÐUÐUÐUr5   r  r  c                 ó^  — t          j        ¦   «         }|j        }|r|j        nd}| r| j                             d¦  «        nd}|�%|�#||k    rt          j        d|› d|› d�¦  «         dS |j                             dd¦  «        }|r%|�|�|€|�t          j        d|› d|› d�¦  «         dS d	S )
z¶
    Check if we should continue the incoming trace according to the strict_trace_continuation spec.
    https://develop.sentry.dev/sdk/telemetry/traces/#stricttracecontinuation
    Nrw  zKStarting a new trace because org IDs don't match (incoming baggage org_id: z, SDK org_id: ú)FÚstrict_trace_continuationzvStarting a new trace because strict trace continuation is enabled and one org ID is missing (incoming baggage org_id: T)	r�   r‚   rx  rw  rO  r\   r   rT  rU   )r  rŠ   rx  Úclient_org_idÚbaggage_org_idrH  s         r3   r#  r#  7  s=  € õ Ô"Ñ$Ô$€FØÔ"€JØ)3Ð=�JÔ%Ð%¸€MØ;BÐL�WÔ)×-Ò-¨hÑ7Ô7Ð7È€Nð 	Ð!ØÐ&Ø˜^Ò+Ð+åŒð IÐZhð  Ið  Ið  yFð  Ið  Ið  Iñ	
ô 	
ð 	
ð ˆuà&,¤n×&8Ò&8Ø# Uñ'ô 'Ðð !ð ØÐ&¨=Ð+@ØÐ" }Ð'@åŒLð xð  JXð  xð  xð  huð  xð  xð  xñô ð ð �5àˆ4r5   r¥  zMutableMapping[str, str]Úsentry_baggagec                 ó¾   — |                       t          d¦  «        }t                               |¦  «        }t	          |¦  «        dk    rdnd}||z   |z   | t          <   dS )zùAdd the Sentry baggage to the headers.

    This function directly mutates the provided headers. The provided sentry_baggage
    is appended to the existing baggage. If the baggage already contains Sentry items,
    they are stripped out first.
    r¿   r   rï   N)r\   r!  r  r–  rN   )r¥  rK  Úexisting_baggageÚstripped_existing_baggageÚ	separators        r3   r¨  r¨  [  sj   € ð —{’{Õ#6¸Ñ;Ô;ÐÝ '× <Ò <Ð=MÑ NÔ NÐåÐ4Ñ5Ô5¸Ò9Ð9��¸r€Ið 	" IÑ-°Ñ>ð ÕÑ Ð Ð r5   zOptional[Attributes]zsentry_sdk.ScopezFtuple[Optional[bool], Optional[float], Optional[float], Optional[str]]c                 ó  — t          j        ¦   «         }|                     ¦   «         }t          |j        ¦  «        s|j        dddfS d}|j        �|j                             ¦   «         }|€t          |j	        ¦  «        }t          |j                             d¦  «        ¦  «        }|rº|�t          |¦  «        }ni }|j	        d|j        |                     d¦  «        | | dd|                     d¦  «        d|dœ|j        dœ}|j        r|                     |j        ¦  «         	  |j        d         |¦  «        }nC# t           $ r t#          j        dd¬	¦  «         Y d
S w xY w|j        �|j        }n|j        d         }t'          |d¬¦  «        st#          j        d| › d�¦  «         dS t)          |¦  «        }|s'|rd}	nd}	t#          j        d| › d|	› �¦  «         dd|dfS |}
|j        r.|d|j        j        z  z  }|st#          j        d| › d�¦  «         dS ||k     }|rt#          j        d| › �¦  «         d}nD|
|k    r!||
k     rt#          j        d| › d�¦  «         d}nt#          j        d| › d|› d�¦  «         d}||||fS )zû
    Decide whether a span should be sampled.

    Returns a tuple with:
    1. the sampling decision (sampled, unsampled, deferred)
    2. the effective sample rate
    3. the sample rand
    4. the reason for not sampling the span, if unsampled
    NrZ   r|   r‡  )rú   r  rû   r   r}   ÚdescriptionrÝ   rÜ   r�  r  r{   )Útransaction_contextrü   z1[Tracing] traces_sampler raised; unsampling traceT)Úexc_info)FNNÚcallback_errorrY   ÚTracing)r�  z[Tracing] Discarding z  because of invalid sample rate.)FNNrU  zYtraces_sampler returned 0 or False, or is using a fallback sample rate that is 0 or Falseztraces_sample_rate is set to 0z	 because Fr˜  rU  rµ  z because backpressure)Fr˜  NÚbackpressurez[Tracing] Starting rV  zA because it's not included in the random sample (sampling rate = rG  )r�   r‚   Úget_active_propagation_contextr^   rU   rü   r  rX  rR  rú   Úcallabler\   rä  rû   r  r$  r°   r   r”   r   rN  rT  ÚmonitorÚdownsample_factor)r}   r~   rn  rŠ   r'  rI  Útraces_sampler_definedÚsampling_contextrU  ÚreasonÚsample_rate_before_backpressurer  Úoutcomes                r3   Ú_make_sampling_decisionr`  n  sg  € õ Ô"Ñ$Ô$€Fà×>Ò>Ñ@Ô@Ðå˜vœ~Ñ.Ô.ð DØ"Ô1°4¸¸tÐCÐCà€KØÔ"Ð.Ø)Ô1×>Ò>Ñ@Ô@ˆØÐÝ+Ð,?Ô,HÑIÔIˆõ & f¤n×&8Ò&8Ð9IÑ&JÔ&JÑKÔKÐØð &?ØÐ!Ý˜jÑ)Ô)ˆJˆJàˆJð 0Ô8ØØ"5Ô"DØ —n’n [Ñ1Ô1ØØ#Ø#'Ø!Ø$Ÿ.š.Ð)EÑFÔFØØ"ð$ð $ð 2Ô@ð
ð 
Ðð" Ô6ð 	QØ×#Ò#Ð$7Ô$OÑPÔPÐPð	7Ø:˜&œ.Ð)9Ô:Ð;KÑLÔLˆKˆKøÝð 	7ð 	7ð 	7ÝŒNØCØðñ ô ð ð 7Ð6Ð6ð	7øøøð Ô-Ð9Ø-Ô<ˆKˆKà œ.Ð)=Ô>ˆKõ   °IÐ>Ñ>Ô>ð 0ÝŒÐU¨tÐUÐUÐUÑVÔVÐVØ/Ð/å˜Ñ$Ô$€KØð 6Ø!ð 	6ØpˆFˆFà5ˆFåŒÐD¨TÐDÐD¸FÐDÐDÑEÔEÐEØ�c˜;¨Ð5Ð5ð '2Ð#Ø„~ð 4Ø�q˜&œ.Ô:Ñ:Ñ:ˆàð 	4ÝŒLÐL°ÐLÐLÐLÑMÔMÐMØ3Ð3ð ˜KÒ'€Gàð $ÝŒÐ1¨4Ð1Ð1Ñ2Ô2Ð2Øˆˆð ,¨{Ò:Ð:ØÐ=Ò=Ð=åŒLÐL°ÐLÐLÐLÑMÔMÐMØ$ˆGˆGõ ŒLØ}¨Ð}Ð}ÐozÐ}Ð}Ð}ñô ð ð $ˆGà�K ¨gÐ5Ð5s   Ä$D; Ä; EÅEc                 óT  — t          j        ¦   «         }|j                             dd¦  «        }|j                             d¦  «        pi                      d¦  «        }|�|n|}|sdS dddddt          fd	„}|D ]®}t          |t          t          f¦  «        r ||| ¦  «        r d
S Œ.t          |t          ¦  «        rkd|v sd|v rcd
}d
}	d|v r ||d         | ¦  «        }d|v r>|pi }|d          	                    ¦   «         D ]\  }
}|
|vs ||||
         ¦  «        sd}	 nŒ |r|	r d
S Œ¯dS )z:Determine if a span fits one of the rules in ignore_spans.Úignore_spansNra   FÚruler    r1  r/   c                 óª   — t          | t          ¦  «        r9t          |t          ¦  «        r"t          |                      |¦  «        ¦  «        S dS | |k    S rŒ  )rK   r   rL   r[   Ú	fullmatch)rc  r1  s     r3   Ú_matchesz!is_ignored_span.<locals>._matchesú  sO   € Ý�d�GÑ$Ô$ð 	Ý˜%¥Ñ%Ô%ð Ý˜DŸNšN¨5Ñ1Ô1Ñ2Ô2Ð2à�uà�uŠ}Ðr5   Tr}   r~   )
r�   r‚   rU   r\   r[   rK   rL   r   rä  rˆ   )r}   r~   rŠ   Úis_ignored_at_top_levelÚis_ignored_in_experiment_configrb  rf  rc  Úname_matchesÚattributes_matchr  r1  s               r3   Úis_ignored_spanrk  é  sÍ  € åÔ"Ñ$Ô$€FØ$œn×0Ò0°ÀÑFÔFÐØ'-¤~×'9Ò'9¸.Ñ'IÔ'IÐ'OÈR×&TÒ&TØñ'ô 'Ð#ð #Ð.ð 	 Ðà,ð ð ð Øˆuð�uð  Uð ­tð ð ð ð ð ð ð ˆÝ�d�S¥'˜NÑ+Ô+ð 	Øˆx˜˜dÑ#Ô#ð Ø�t�tðõ ˜�dÑ#Ô#ð 	¨°4¨¨¸<È4Ð;OÐ;OØˆLØ#Ðà˜ˆ~ˆ~Ø'˜x¨¨V¬°dÑ;Ô;�à˜tÐ#Ð#Ø'Ð-¨2�
à(,¨\Ô(:×(@Ò(@Ñ(BÔ(Bð ð Ñ$�I˜uØ ¨
Ð2Ð2¸(¸(Ø˜z¨)Ô4ñ;ô ;Ð2ð ,1Ð(Ø˜ð	 3ð ð Ð 0ð Ø�t�tøàˆ5r5   )r‰  rÞ   )r†   )r!  r‚  r   rÅ   )rÅ   )Fri   N)r�   r�   r{   r‘   r/   N)rŠ   r›   rœ   r�   r/   r(   )r¬   r   r/   rn   )
rŒ   r½   r¸   rn   r´   rµ   r¶   rµ   r/   N)rŒ   r½   r/   N)rì   rn   r/   rí   )rŠ   r›   r£  r    r/   N)r  r  r/   r  )
r   r¬  r}   rn   r~   r_   r­  r   r/   r    )NNTr1   )rn  rç  r/   rè  )rü   r  rU  rY  r/   rë  )r(  r    r/   r‘   )vÚ
contextlibrÒ  rÔ  rÊ   rœ  rÀ   r.  r¼  Úcollections.abcr   r   r   r   r   Úrandomr   Úurllib.parser	   r
   r   ÚImportErrorÚtypingr   r�   Úsentry_sdk.constsr   r   r   Úsentry_sdk.data_collectionr   Úsentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   Útypesr   r    r!   r"   r#   r$   r%   r&   r'   Úsentry_sdk._typesr(   r)   r�  r   Úbase64_strippedr+   r[   r^   re   rh   ÚcontextmanagerrL   rŽ   rš   r«   r±   r¼   rÓ   ræ   rë   r  rƒ   r  r  r¢  r©  r  ÚDEFAULTrÚ  ræ  r»  rN  rR  rQ  rõ  rÀ  r¿  Ú	frozensetrû  rú  rü  r  rÁ  r'  r5  r=  rÄ  rÅ  r#  r¨  r`  rk  Úsentry_sdk.tracesr‰  rÞ   r†   rá  Úsentry_sdk.tracingr!  r‚  r   rÅ   rB   r5   r3   ú<module>r}     s-  ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðØÐÐÐÐÐÐøØð ð ð àÐÐÐÐÐÐÐðøøøð !Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð" ð +ØÐÐÐÐÐð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð -Ð,Ð,Ð,Ð,Ð,Ø*Ð*Ð*Ð*Ð*Ð*ð  �R”Zðñô Ð ðð ð(ð (ð (ð (ð (�Wñ (ô (ð (ð6Ð!;ð Àð ð ð ð ð"+Ð(Bð +Àtð +ð +ð +ð +ð2Ð*Dð 2Èð 2ð 2ð 2ð 2ð Ôð  %ØØ.2ðIð IØðIàðIð ðIð  ð	Ið
 ðIð ðIð ðIð ,ðIð ]ðIð Ið Iñ ÔðIðX(ð (ð (ð (ð%Ø*ð%Ø8Mð%àð%ð %ð %ð %ðPð ð ð ðØðàðð *ðð *ð	ð
 ðð "ðð 
ðð ð ð ð&TQØ
JðTQà!ðTQð *ðTQð *ð	TQð
 
ðTQð TQð TQð TQðn+Ø
Jð+à	ð+ð +ð +ð +ð\+Ø
Jð+à	ð+ð +ð +ð +ð\&Øð&à2ð&ð &ð &ð &ðR&˜ð & Cð &¨Oð &ð &ð &ð &ð$OPð OPð OPð OPð OPñ OPô OPð OPðd~að ~að ~að ~að ~añ ~aô ~að ~aðB	UÐ#Að 	UÈð 	UÐPTð 	Uð 	Uð 	Uð 	Uð)Ø*ð)Ø5:ð)à	ð)ð )ð )ð )ð>ð ð ð ð  &*Ø Ø-1Ø+Ô3ð	}Ø"ð}à
ð}ð +ð}ð ð	}ð
 ð}ð }ð }ð }ðB !Ø-1ØðCð CØ
ðCà*ðCð ðCð ð	Cð Cð Cð CðN +/ðØ'ðàðð ð ð ð '1ð*ð *ð *Øð*ð $ð*ð ð	*ð *ð *ð *ð> Ø$ð Ø3Dð àð ð  ð  ð  ð �uð  3ð ¨?ð ð ð ð ð( *.ðð Ø(ðà
ðð 'ðð 	ð	ð ð ð ð:Ð5ð ¸#ð ð ð ð ð �	ØÔ˜LÔ0°,Ô2FÐGñô €ð
,Ð!?ð ,ÀDð ,ð ,ð ,ð ,ð<Ø(ð<àð<ð ð<ð ð	<ð
 ð<ð <ð <ð <ð~ð ð ð ð8%Ø(ð%Ø;?ð%ØINð%àð%ð %ð %ð %ðP)'Ø
ð)'à(ð)'ð ð)'ð ð	)'ð
 ð)'ð ð)'ð ð)'ð 
ð)'ð )'ð )'ð )'ðXVØ
ðVà(ðVð ðVð ð	Vð
 
ðVð Vð Vð Vð"!Ð$7ð !¸Dð !ð !ð !ð !ðHØ'ðØ9<ðà	ðð ð ð ð&x6Ø
ðx6à&ðx6ð ðx6ð Nð	x6ð x6ð x6ð x6ðv3˜#ð 3Ð+Að 3Àdð 3ð 3ð 3ð 3ðnð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð (Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(ð (s   ÁA	 Á	AÁA