Ë
    õ�DjrW  ã                   ó  — 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 d dlmZ d dl	m
Z
 d dlmZm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mZmZmZmZmZmZmZmZ d dlm Z  e r$d d	lm!Z! d d
lm"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dl&m'Z'  ejP                  d«      Z)dZ* G d„ de«      Z+d„ Z,e jZ                  	 	 d%d„«       Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4 G d„ d«      Z5 G d„ d«      Z6d„ Z7d „ Z8d!„ Z9d&d"„Z:d d#l;m<Z<m=Z=m>Z> e rd d$l;m?Z? yy)'é    N)ÚMapping)Ú	timedelta)Úwraps)ÚquoteÚunquote)ÚOPÚSPANDATA)Úcapture_internal_exceptionsÚfilename_for_moduleÚDsnÚloggerÚmatch_regex_listÚqualname_from_functionÚ	to_stringÚis_sentry_urlÚ_is_external_sourceÚ_is_in_project_rootÚ_module_in_list)ÚTYPE_CHECKING)ÚAny)ÚDict)Ú	Generator)ÚOptional)ÚUnion)Ú	FrameTypez5^[ 	]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ 	]*$z(([a-zA-Z0-9+/]{4})*([a-zA-Z0-9+/]{2,3})?c                   ó(   — e Zd Z	 dd„Zd„ Zd„ Zd„ Zy)ÚEnvironHeadersc                 ó    — || _         || _        y ©N)ÚenvironÚprefix)Úselfr    r!   s      ú\C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/tracing_utils.pyÚ__init__zEnvironHeaders.__init__=   s   € ð ˆŒØˆ�ó    c                 óv   — | j                   | j                  |j                  dd«      j                  «       z      S ©Nú-Ú_)r    r!   ÚreplaceÚupper)r"   Úkeys     r#   Ú__getitem__zEnvironHeaders.__getitem__F   s.   € à�|‰|˜DŸK™K¨#¯+©+°c¸3Ó*?×*EÑ*EÓ*GÑGÑHÐHr%   c                 ó8   — t        d„ t        | «      D «       «      S )Nc              3   ó    K  — | ]  }d –— Œ y­w)é   N© )Ú.0r)   s     r#   ú	<genexpr>z)EnvironHeaders.__len__.<locals>.<genexpr>L   s   è ø€ Ò)˜”1Ñ)ùs   ‚)ÚsumÚiter©r"   s    r#   Ú__len__zEnvironHeaders.__len__J   s   € äÑ)œd 4›jÔ)Ó)Ð)r%   c              #   óü   K  — | j                   D ]i  }t        |t        «      sŒ|j                  dd«      j	                  «       }|j                  | j                  «      sŒP|t        | j                  «      d  –— Œk y ­wr'   )r    Ú
isinstanceÚstrr*   r+   Ú
startswithr!   Úlen)r"   Úks     r#   Ú__iter__zEnvironHeaders.__iter__N   si   è ø€ à—‘ò 	(ˆAÜ˜a¤Ô%Øà—	‘	˜#˜sÓ#×)Ñ)Ó+ˆAØ—<‘< §¡Ô,Øà”C˜Ÿ™Ó$Ð&Ð'Ó'ñ	(ùs   ‚A:A<N)ÚHTTP_)Ú__name__Ú
__module__Ú__qualname__r$   r-   r7   r>   r1   r%   r#   r   r   <   s   „ ð óòIò*ó
(r%   r   c                 ó”   — | €yt        | j                  d«      duxr( | j                  d«      duxs | j                  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)Úoptionss    r#   Úhas_tracing_enabledrJ   [   sY   € ð €ØäØ�‰Ð$Ó%¨UÐ2ò 	
à�K‰KÐ,Ó-°TÐ9ò 9Ø�{‰{Ð+Ó,°DÐ8ó	ð r%   c              #   ó2  K  — t        j                  «       j                  d   j                  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 «       t        j                  t        j                  ||¬«      5 }|j                  «       D ]  \  }	}
|j                  |	|
«       Œ |–— d d d «       y # 1 sw Y   ŒgxY w# 1 sw Y   y xY w­w)NÚ_experimentsÚrecord_sql_paramsFÚpyformatÚformatz	db.paramszdb.paramstyleTzdb.executemanyz	db.cursorÚquery)ÚmessageÚcategoryÚdata)ÚopÚnameÚorigin)Ú
sentry_sdkÚ
get_clientrI   rH   Ú_format_sqlr
   Úadd_breadcrumbÚ
start_spanr   ÚDBÚitemsÚset_data)ÚcursorrP   Úparams_listÚ
paramstyleÚexecutemanyÚrecord_cursor_reprÚspan_originrS   Úspanr=   Úvs              r#   Úrecord_sql_queriesrg   m   s?  è ø€ ô ×ÑÓ×&Ñ& ~Ñ6×:Ñ:Ð;NÐPUÔVÙ˜k¨d¨VÒ3ØˆKà˜Ò#Ø!‰JàˆØˆ
ä˜ Ó&€Eà€DØÐØ'ˆˆ[ÑØÐØ *ˆˆ_ÑÙØ!%ˆÐÑÙ˜fÐ0Ø"ˆˆ[Ñä	$Ó	&ñ NÜ×!Ñ!¨%¸'ÈÕM÷Nô 
×	Ñ	Ü�5‰5ØØô
ð ð 
Ø—J‘J“Lò 	 ‰DˆAˆqØ�M‰M˜!˜QÕð	 àŠ
÷ð ÷Nð Nú÷ð üs6   ‚A>DÂ C?Â.DÃ/DÃ6	DÃ?DÄDÄDÄDc                 ó|  — |j                   t        j                  k(  r*| j                  |j                  dd|j
                  ¬«       y |j                   t        j                  k(  r| j                  dd|j                  ¬«       y |j                   dk(  r*| j                  dd|j                  |j                  ¬«       y y )NÚredis)rQ   ÚtyperR   rS   ÚhttpÚhttplib)rj   rR   rS   Ú
subprocess)rj   rR   rQ   rS   )rT   r   ÚDB_REDISrZ   ÚdescriptionÚ_tagsÚHTTP_CLIENTÚ_data)Úscopere   s     r#   Ú"maybe_create_breadcrumbs_from_spanrt   �   sŸ   € ð ‡w�w”"—+‘+ÒØ×ÑØ×$Ñ$¨7¸WÈ4Ï:É:ð 	õ 	
ð 
�‰”B—N‘NÒ	"Ø×Ñ &°9À4Ç:Á:ÐÕNØ	�‰�LÒ	 Ø×ÑØØ!Ø×$Ñ$Ø—‘ð	 	õ 	
ð 
!r%   c                 óN   — 	 | j                   j                  S # t        $ r Y y w xY wr   )Úf_codeÚco_filenameÚ	Exception)Úframes    r#   Ú_get_frame_module_abs_pathrz   ¯   s)   € ðØ�|‰|×'Ñ'Ð'øÜò Ùðús   ‚ ˜	$£$c                 ó€   — t        ||«      }t        |«      xs t        ||«      }|  xr |xs t        ||«      xr | S r   )r   r   r   )Úis_sentry_sdk_frameÚ	namespaceÚin_app_includeÚin_app_excludeÚabs_pathÚproject_rootÚshould_be_includedÚshould_be_excludeds           r#   Ú_should_be_includedr„   ·   s[   € ô )¨°NÓCÐÜ,¨XÓ6ò ¼/Ø�>ó;Ðð #Ð"ò Øò 	TÜ ¨,Ó7ÒRÐ@RÐ<Rðr%   c                 óð  — t        j                  «       }|j                  «       sy| j                  �| j                  €y|j
                  j                  dd«      }|sy| j                  | j                  z
  }|j
                  j                  dd«      }|t        d¬«      z  |kD  }|sy|j
                  d   }|j
                  j                  d	«      }|j
                  j                  d
«      }t        j                  «       }	|	�at        |	«      }
	 |	j                  j                  d«      }|duxr |j                  d«      }t        |||||
|¬«      }|rn|	j                  }	|	�Œad}	|	��G	 |	j                   }|�*| j#                  t$        j&                  |	j                   «       	 |	j                  j                  d«      }|� | j#                  t$        j(                  |«       t        |	«      }|�t|�t+        ||«      }nE|�A|j                  |«      r0|j-                  |d«      j/                  t0        j2                  «      }n|}| j#                  t$        j4                  |«       	 |	j6                  j8                  }|�5| j#                  t$        j:                  |	j6                  j8                  «       yyy# t        $ r d}Y �Œ•w xY w# t        $ r d}Y �Œ[w xY w# t        $ r d}Y �Œ%w xY w# t        $ r d}Y Œ|w xY w)zB
    Adds OTel compatible source code information to the span
    NÚenable_db_query_sourceTÚdb_query_source_threshold_msr   r0   )Úmillisecondsr�   r~   r   r@   zsentry_sdk.)r|   r}   r~   r   r€   r�   Ú )rW   rX   Ú	is_activeÚ	timestampÚstart_timestamprI   rH   r   ÚsysÚ	_getframerz   Ú	f_globalsrx   r;   r„   Úf_backÚf_linenor^   r	   ÚCODE_LINENOÚCODE_NAMESPACEr   r*   ÚlstripÚosÚsepÚCODE_FILEPATHrv   Úco_nameÚCODE_FUNCTION)re   ÚclientÚshould_add_query_sourceÚdurationÚ	thresholdÚ
slow_queryr�   r~   r   ry   r€   r}   r|   r‚   ÚlinenoÚfilepathÚin_app_pathÚcode_functions                     r#   Úadd_query_sourcer£   Ë   sÞ  € ô
 ×"Ñ"Ó$€FØ×ÑÔØà‡~�~Ð ×!5Ñ!5Ð!=Øà$Ÿn™n×0Ñ0Ð1IÈ4ÓPÐÙ"Øà�~‰~ × 4Ñ 4Ñ4€HØ—‘×"Ñ"Ð#AÀ1ÓE€IØœI°1Ô5Ñ5¸	ÑA€JáØà—>‘> .Ñ1€LØ—^‘^×'Ñ'Ð(8Ó9€NØ—^‘^×'Ñ'Ð(8Ó9€Nô �M‰M‹O€EØ
Ð
Ü-¨eÓ4ˆð	ØŸ™×+Ñ+¨JÓ7ˆIð (¨tÐ3ò 
¸	×8LÑ8LØó9
Ðô 1Ø 3ØØ)Ø)ØØ%ô
Ðñ Øà—‘ˆð/ Ñ
ð2 ˆð Ñð	Ø—^‘^ˆFð ÐØ�M‰Mœ(×.Ñ.°·±Ô?ð	ØŸ™×+Ñ+¨JÓ7ˆIð Ð Ø�M‰Mœ(×1Ñ1°9Ô=ä-¨eÓ4ˆØÐØÐ$Ü1°)¸XÓF‘ØÐ)¨h×.AÑ.AÀ,Ô.OØ&×.Ñ.¨|¸RÓ@×GÑGÌÏÉÓO‘à&�Ø�M‰Mœ(×0Ñ0°+Ô>ð	!Ø!ŸL™L×0Ñ0ˆMð Ð$Ø�M‰Mœ(×0Ñ0°%·,±,×2FÑ2FÕGð %ð= øô/ ò 	Ø‹Ið	ûô4 ò 	Ø‹Fð	ûô ò 	Ø‹Ið	ûô" ò 	!Ø ŠMð	!úsH   ÄJ1 Å*K Æ#K É"K' Ê1K Ê?K ËKËKËK$Ë#K$Ë'K5Ë4K5c                 ó@  — | sy| j                  d«      r| j                  d«      r| dd } t        j                  | «      }|sy|j	                  «       \  }}}d}|rdj                  t        |d«      «      }|rdj                  t        |d«      «      }|r|d	k7  }|||d
œS )zL
    Given a `sentry-trace` header string, return a dictionary of data.
    Nz00-z-00é   éýÿÿÿz{:032x}é   z{:016x}Ú0)Útrace_idÚparent_span_idÚparent_sampled)r;   ÚendswithÚSENTRY_TRACE_REGEXÚmatchÚgroupsrO   Úint)Úheaderr®   r©   rª   Úsampled_strr«   s         r#   Úextract_sentrytrace_datar³   &  s±   € ñ
 Øà×Ñ˜Ô F§O¡O°EÔ$:Ø˜˜"�ˆä×$Ñ$ VÓ,€EÙØà,1¯L©L«NÑ)€Hˆn˜kØ€NáØ×#Ñ#¤C¨°"Ó$5Ó6ˆÙØ"×)Ñ)¬#¨n¸bÓ*AÓBˆÙØ$¨Ñ+ˆð Ø(Ø(ñð r%   c                 óì   — d }	 t        | d«      rF| j                  |«      }t        |t        «      r%|j	                  | j
                  j                  «      }|xs t        |«      S # t        $ r d }Y Œw xY w)NÚmogrify)	Úhasattrrµ   r9   ÚbytesÚdecodeÚ
connectionÚencodingrx   r   )r_   ÚsqlÚreal_sqls      r#   rY   rY   F  sq   € ð €HðÜ�6˜9Ô%Ø—~‘~ cÓ*ˆHÜ˜(¤EÔ*Ø#Ÿ?™?¨6×+<Ñ+<×+EÑ+EÓF�ð Ò%”y “~Ð%øô ò ØŠðús   „AA% Á%A3Á2A3c                   óª   — e Zd ZdZdZ	 	 	 	 	 dd„Zed„ «       Zed„ «       Z	e	j                  d„ «       Z	ed„ «       Zej                  d	„ «       Zd
„ Zd„ Zy)ÚPropagationContextzJ
    The PropagationContext represents the data of a trace in Sentry.
    ©Ú	_trace_idÚ_span_idrª   r«   Údynamic_sampling_contextNc                 óR   — || _         	 || _        	 || _        	 || _        	 || _        y r   r¿   )r"   r©   Úspan_idrª   r«   rÂ   s         r#   r$   zPropagationContext.__init__g  sD   € ð "ˆŒØ/àˆŒØ:à,ˆÔð	Hð -ˆÔð	Qð )AˆÔ%Ø?r%   c                 ó4  — d }t        |«      }|j                  t        «      }|r2t        «       }t        j                  |«      j                  «       |_        |j                  t        «      }|r*t        |«      }|�|€
t        «       }|j                  |«       |S r   )
Únormalize_incoming_datarH   ÚBAGGAGE_HEADER_NAMEr¾   ÚBaggageÚfrom_incoming_headerrÂ   ÚSENTRY_TRACE_HEADER_NAMEr³   Úupdate)ÚclsÚincoming_dataÚpropagation_contextÚnormalized_dataÚbaggage_headerÚsentry_trace_headerÚsentrytrace_datas          r#   Úfrom_incoming_dataz%PropagationContext.from_incoming_data‚  s    € ð #Ðä1°-Ó@ˆØ(×,Ñ,Ô-@ÓAˆÙÜ"4Ó"6ÐÜ;B×;WÑ;WØó<ç&Ñ&Ó(ð  Ô8ð .×1Ñ1Ô2JÓKÐÙÜ7Ð8KÓLÐØÐ+Ø&Ð.Ü*<Ó*>Ð'Ø#×*Ñ*Ð+;Ô<à"Ð"r%   c                 óx   — | j                   s#t        j                  «       j                  | _         | j                   S )z!The trace id of the Sentry trace.)rÀ   ÚuuidÚuuid4Úhexr6   s    r#   r©   zPropagationContext.trace_id™  s(   € ð �~Š~Ü!ŸZ™Z›\×-Ñ-ˆDŒNà�~‰~Ðr%   c                 ó   — || _         y r   )rÀ   ©r"   Úvalues     r#   r©   zPropagationContext.trace_id¢  s   € ð ˆ�r%   c                 ó~   — | j                   s&t        j                  «       j                  dd | _         | j                   S )z+The span id of the currently executed span.r§   N)rÁ   rÕ   rÖ   r×   r6   s    r#   rÄ   zPropagationContext.span_id§  s/   € ð �}Š}Ü ŸJ™J›L×,Ñ,¨R¨SÐ1ˆDŒMà�}‰}Ðr%   c                 ó   — || _         y r   )rÁ   rÙ   s     r#   rÄ   zPropagationContext.span_id°  s   € ð ˆ�r%   c                 ón   — |j                  «       D ]  \  }}	 t        | ||«       Œ y# t        $ r Y Œ"w xY w)zU
        Updates the PropagationContext with data from the given dictionary.
        N)r]   ÚsetattrÚAttributeError)r"   Ú
other_dictr,   rÚ   s       r#   rË   zPropagationContext.updateµ  sE   € ð
 %×*Ñ*Ó,ò 	‰JˆC�ðÜ˜˜c 5Õ)ñ	øô "ò Ùðús   ˜(¨	4³4c                 ó�   — dj                  | j                  | j                  | j                  | j                  | j
                  «      S )Nzm<PropagationContext _trace_id={} _span_id={} parent_span_id={} parent_sampled={} dynamic_sampling_context={}>)rO   rÀ   rÁ   rª   r«   rÂ   r6   s    r#   Ú__repr__zPropagationContext.__repr__À  sD   € à~÷  Fñ  FØ�N‰NØ�M‰MØ×ÑØ×ÑØ×)Ñ)ó
ð 	
r%   )NNNNN)r@   rA   rB   Ú__doc__Ú	__slots__r$   ÚclassmethodrÓ   Úpropertyr©   ÚsetterrÄ   rË   râ   r1   r%   r#   r¾   r¾   Z  s›   „ ñð€Ið ØØØØ!%ó@ð6 ñ#ó ð#ð, ñó ðð ‡_�_ñó ðð ñó ðð ‡^�^ñó ðò	ó
r%   r¾   c                   óœ   — e Zd ZdZdZdZ ej                  d«      Z	 	 dd„Z	e
d„ «       Ze
d„ «       Ze
d„ «       Zd	„ Zd
„ Zdd„Zed„ «       Zy)rÈ   zR
    The W3C Baggage header information (see https://www.w3.org/TR/baggage/).
    ©Úsentry_itemsÚthird_party_itemsÚmutablezsentry-z^sentry-c                 ó.   — || _         || _        || _        y r   ré   )r"   rê   rë   rì   s       r#   r$   zBaggage.__init__Õ  s   € ð )ˆÔØ!2ˆÔØˆ�r%   c                 óš  — i }d}d}|r«|j                  d«      D ]—  }d|vrŒt        «       5  |j                  «       }|j                  d«      \  }}t        j                  j                  |«      r.t        |j                  d«      d   «      }t        |«      ||<   d}n||rdnd|z   z  }ddd«       Œ™ t        |||«      S # 1 sw Y   Œ°xY w)	zF
        freeze if incoming header already has sentry baggage
        r‰   Tú,ú=r(   r0   FN)Úsplitr
   ÚstriprÈ   ÚSENTRY_PREFIX_REGEXr®   r   )	rÌ   r±   rê   rë   rì   Úitemr,   ÚvalÚbaggage_keys	            r#   rÉ   zBaggage.from_incoming_headerß  sâ   € ð ˆØÐØˆáØŸ™ SÓ)ò W�Ø˜d‘?Øä0Ó2ñ WØŸ:™:›<�DØ#Ÿz™z¨#›‘H�C˜Ü×2Ñ2×8Ñ8¸Ô=Ü&-¨c¯i©i¸«n¸QÑ.?Ó&@˜Ü4;¸C³L˜ [Ñ1Ø"'™à)Ñ5F©cÈBÐRVÑ-VÑVÐ)÷Wð Wð	Wô �|Ð%6¸Ó@Ð@÷Wð Wús   ¬A>CÃC
	c                 óð  — i }d}d}t        j                  «       }|j                  «       r|j                  €t	        |«      S |j
                  }|j                  }|�|j                  |d<   |j                  d«      r|d   |d<   |j                  d«      r|d   |d<   |j                  d«      rt        |d   «      j                  |d<   |j                  d«      rt        |d   «      |d	<   t	        |||«      S )
Nr‰   Fr©   ÚenvironmentÚreleaseÚdsnÚ
public_keyrE   Úsample_rate)rW   rX   rŠ   Ú_propagation_contextrÈ   rI   r©   rH   r   rû   r:   )rÌ   rs   rê   rë   rì   rš   rI   rÎ   s           r#   Úfrom_optionszBaggage.from_optionsú  sü   € ð ˆØÐØˆä×&Ñ&Ó(ˆà×ÑÔ! U×%?Ñ%?Ð%GÜ˜<Ó(Ð(à—.‘.ˆØ#×8Ñ8ÐàÐ*Ø':×'CÑ'CˆL˜Ñ$à�;‰;�}Ô%Ø*1°-Ñ*@ˆL˜Ñ'à�;‰;�yÔ!Ø&-¨iÑ&8ˆL˜Ñ#à�;‰;�uÔÜ),¨W°U©^Ó)<×)GÑ)GˆL˜Ñ&à�;‰;Ð+Ô,Ü*-¨gÐ6JÑ.KÓ*LˆL˜Ñ'ä�|Ð%6¸Ó@Ð@r%   c                 óæ  — t        j                  «       }i }|j                  «       st        |«      S |j                  xs i }|j
                  |d<   |j                  d«      r|d   |d<   |j                  d«      r|d   |d<   |j                  d«      rt        |d   «      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                  j                   «       t        |d¬«      S )z�
        Populate fresh baggage entry with sentry_items and make it immutable
        if this is the head SDK which originates traces.
        r©   rø   rù   rú   rû   Útransactionrü   ÚtrueÚfalseÚsampledF©rì   )rW   rX   rŠ   rÈ   rI   r©   rH   r   rû   rU   ÚsourceÚLOW_QUALITY_TRANSACTION_SOURCESrü   r:   r  Ú_baggagerê   rË   )rÌ   r   rš   rê   rI   s        r#   Úpopulate_from_transactionz!Baggage.populate_from_transaction  sR  € ô ×&Ñ&Ó(ˆØˆà×ÑÔ!Ü˜<Ó(Ð(à—.‘.Ò& Bˆà#.×#7Ñ#7ˆ�ZÑ à�;‰;�}Ô%Ø*1°-Ñ*@ˆL˜Ñ'à�;‰;�yÔ!Ø&-¨iÑ&8ˆL˜Ñ#à�;‰;�uÔÜ),¨W°U©^Ó)<×)GÑ)GˆL˜Ñ&ð ×ÒØ×"Ñ"Ô*IÑIà*5×*:Ñ*:ˆL˜Ñ'à×"Ñ"Ð.Ü*-¨k×.EÑ.EÓ*FˆL˜Ñ'à×ÑÐ*Ø0;×0CÒ0C¡fÈˆL˜Ñ#ð
 ×Ò K×$8Ñ$8×$EÒ$EØ×Ñ × 4Ñ 4× AÑ AÔBä�|¨UÔ3Ð3r%   c                 ó   — d| _         y )NFr  r6   s    r#   ÚfreezezBaggage.freezeI  s	   € àˆ�r%   c                 óX   — i }| j                   j                  «       D ]
  \  }}|||<   Œ |S r   )rê   r]   )r"   r±   r,   rô   s       r#   rÂ   z Baggage.dynamic_sampling_contextM  s9   € àˆà×*Ñ*×0Ñ0Ó2ò 	‰IˆC�ØˆF�3ŠKð	ð ˆr%   c                 ón  — g }| j                   j                  «       D ]]  \  }}t        «       5  t        j                  t        |«      z   dz   t        t        |«      «      z   }|j                  |«       d d d «       Œ_ |r|j                  | j                  «       dj                  |«      S # 1 sw Y   Œ—xY w)Nrð   rï   )
rê   r]   r
   rÈ   ÚSENTRY_PREFIXr   r:   Úappendrë   Újoin)r"   Úinclude_third_partyr]   r,   rõ   rô   s         r#   Ú	serializezBaggage.serializeV  s    € àˆà×)Ñ)×/Ñ/Ó1ò 	#‰HˆC�Ü,Ó.ñ #Ü×,Ñ,¬u°S«zÑ9¸CÑ?Ä%ÌÈCËÃ/ÑQ�Ø—‘˜TÔ"÷#ð #ð	#ñ
 Ø�L‰L˜×/Ñ/Ô0à�x‰x˜‹Ð÷#ð #ús   ­AB+Â+B4	c                 óP   — dj                  d„ | j                  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   óz   K  — | ]3  }t         j                  j                  |j                  «       «      s|–— Œ5 y ­wr   )rÈ   ró   r®   rò   )r2   rô   s     r#   r3   z/Baggage.strip_sentry_baggage.<locals>.<genexpr>l  s2   è ø€ ò àÜ×2Ñ2×8Ñ8¸¿¹»ÔFô ñùs   ‚9;)r  rñ   )r±   s    r#   Ústrip_sentry_baggagezBaggage.strip_sentry_baggaged  s+   € ð �x‰xñà"ŸL™L¨Ó-ôó
ð 	
r%   N)r‰   T)F)r@   rA   rB   rã   rä   r  ÚreÚcompileró   r$   rå   rÉ   rþ   r  r
  rÂ   r  Ústaticmethodr  r1   r%   r#   rÈ   rÈ   Ë  s—   „ ñð A€Ià€MØ$˜"Ÿ*™* ZÓ0Ðð
 Øó	ð ñAó ðAð4 ñAó ðAð@ ñ+4ó ð+4òZòóð ñ
ó ñ
r%   rÈ   c                 óV   — | j                   d   }t        | |«      ry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)rI   r   r   )rš   Úurlr  s      r#   Úshould_propagate_tracer  t  s1   € ð
 !'§¡Ð/JÑ KÐä�V˜SÔ!Øä˜CÐ!:ÈtÔTÐTr%   c                 ó°   — i }| j                  «       D ]@  \  }}|j                  d«      r|dd }|j                  dd«      j                  «       }|||<   ŒB |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]   r;   r*   Úlower)rÍ   rS   r,   rÚ   s       r#   rÆ   rÆ   �  se   € ð
 €DØ#×)Ñ)Ó+ò ‰
ˆˆUØ�>‰>˜'Ô"Ø�a�b�'ˆCà�k‰k˜#˜sÓ#×)Ñ)Ó+ˆØˆˆSŠ	ðð €Kr%   c                 ó.  ‡ — t        j                  ‰ «      r0t        ‰ «      ˆ fd„«       }	 t        j                  ‰ «      |_        |S t        ‰ «      ˆ fd„«       }	 t        j                  ‰ «      |_        |S # t
        $ r Y |S w xY w# t
        $ r Y |S w xY w)zc
    Decorator to add child spans for functions.

    See also ``sentry_sdk.tracing.trace()``.
    c               Ÿ   ó*  •K  — t        «       }|€/t        j                  dt        ‰«      «        ‰| i |¤Žƒ d {  –—† S |j	                  t
        j                  t        ‰«      ¬«      5   ‰| i |¤Žƒ d {  –—† cd d d «       S 7 ŒH7 Œ# 1 sw Y   y xY w­w©NzbCannot create a child span for %s. Please start a Sentry transaction before calling this function.)rT   rU   ©Úget_current_spanr   Údebugr   Ústart_childr   ÚFUNCTION©ÚargsÚkwargsre   Úfuncs      €r#   Úfunc_with_tracingz5start_child_span_decorator.<locals>.func_with_tracing›  sž   øè ø€ ô $Ó%ˆDàˆ|Ü—‘ðVä*¨4Ó0ôñ
 " 4Ð2¨6Ñ2×2Ð2à×!Ñ!Ü—;‘;Ü+¨DÓ1ð "ó ñ 3ñ " 4Ð2¨6Ñ2×2÷	3ñ 3ð 3øð 3ø÷	3ð 3üs9   ƒ7BºB».BÁ)BÁ5BÁ6BÁ9BÂBÂBÂBc                  óú   •— t        «       }|€'t        j                  dt        ‰«      «        ‰| i |¤ŽS |j	                  t
        j                  t        ‰«      ¬«      5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY wr"  r#  r(  s      €r#   r,  z5start_child_span_decorator.<locals>.func_with_tracing·  s„   ø€ ô $Ó%ˆDàˆ|Ü—‘ðVä*¨4Ó0ôñ
 ˜TÐ, VÑ,Ð,à×!Ñ!Ü—;‘;Ü+¨DÓ1ð "ó ñ -ñ ˜TÐ, VÑ,÷	-÷ -ò -ús   ÁA1Á1A:)ÚinspectÚiscoroutinefunctionr   Ú	signatureÚ__signature__rx   )r+  r,  s   ` r#   Ústart_child_span_decoratorr2  ‘  s¹   ø€ ô ×"Ñ" 4Ô(ä	ˆt‹ó	3ó 
ð	3ð&	Ü.5×.?Ñ.?ÀÓ.EÐÔ+ð@ Ðô3 
ˆt‹ó	-ó 
ð	-ð&	Ü.5×.?Ñ.?ÀÓ.EÐÔ+ð Ðøô? ò 	Øð< Ðð?	ûô8 ò 	ØàÐð	ús#   «A7 ÁB Á7	BÂBÂ	BÂBc                 óN   — | xs t        j                  «       } | j                  }|S )zU
    Returns the currently active span if there is one running, otherwise `None`
    )rW   Úget_current_scopere   )rs   Úcurrent_spans     r#   r$  r$  Ó  s&   € ð
 Ò3”Z×1Ñ1Ó3€EØ—:‘:€LØÐr%   )rÇ   r  rÊ   )ÚSpan)FÚmanualr   )@Ú
contextlibr.  r•   r  r�   Úcollections.abcr   Údatetimer   Ú	functoolsr   Úurllib.parser   r   rÕ   rW   Úsentry_sdk.constsr   r	   Úsentry_sdk.utilsr
   r   r   r   r   r   r   r   r   r   r   Útypingr   r   r   r   r   r   Útypesr   r  r­   Úbase64_strippedr   rJ   Úcontextmanagerrg   rt   rz   r„   r£   r³   rY   r¾   rÈ   r  rÆ   r2  r$  Úsentry_sdk.tracingrÇ   r  rÊ   r6  r1   r%   r#   ú<module>rD     s  ðÛ Û Û 	Û 	Û 
Ý #Ý Ý ß 'Û ã ß *÷÷ ÷ ñ õ !áÝÝÝ ÝÝåð  �R—Z‘ZðóÐ ðð ô(�Wô (ò>ð$ ×Ñð Øò,ó ð,ò^
ò$òò(XHòvò@&÷(n
ñ n
÷bf
ñ f
òR
Uòò ?óD÷ñ ñ Þ'ð r%   