Ë
    S>{i.0  ã                   ó’  — d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ erd dlmZ d dlmZmZ nd dlmZ d dlmZmZ er"d dl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 j:                  d«      ZdZ G d„ de«      Z d„ Z!ejD                  	 dd„«       Z#d„ Z$d„ Z%d„ Z& G d„ de'«      Z(d„ Z)d„ Z*d dl+m,Z, y)é    N)ÚOP)Úcapture_internal_exceptionsÚDsnÚmatch_regex_listÚ	to_stringÚis_sentry_url)ÚPY2Ú	iteritems)ÚTYPE_CHECKING)ÚMapping)ÚquoteÚunquote)ÚAny)ÚDict)Ú	Generator)ÚOptional)ÚUnionz5^[ 	]*([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      úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentry_sdk/tracing_utils.pyÚ__init__zEnvironHeaders.__init__6   s   € ð ˆŒØˆ�ó    c                 óv   — | j                   | j                  |j                  dd«      j                  «       z      S ©Nú-Ú_)r   r   ÚreplaceÚupper)r   Úkeys     r   Ú__getitem__zEnvironHeaders.__getitem__?   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>E   s   è ø€ Ò)˜”1Ñ)ùs   ‚)ÚsumÚiter©r   s    r   Ú__len__zEnvironHeaders.__len__C   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__G   si   è ø€ à—‘ò 	(ˆAÜ˜a¤Ô%Øà—	‘	˜#˜sÓ#×)Ñ)Ó+ˆAØ—<‘< §¡Ô,Øà”C˜Ÿ™Ó$Ð&Ð'Ó'ñ	(ùs   ‚A:A<N)ÚHTTP_)Ú__name__Ú
__module__Ú__qualname__r   r%   r/   r6   r)   r   r   r   r   5   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_enabledrB   T   sY   € ð €ØäØ�‰Ð$Ó%¨UÐ2ò 	
à�K‰KÐ,Ó-°TÐ9ò 9Ø�{‰{Ð+Ó,°DÐ8ó	ð r   c              #   ó(  K  — | j                   r;| 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  | j                  |d|¬«       d d d «       | j                  t        j                  |¬«      5 }|j                  «       D ]  \  }	}
|j                  |	|
«       Œ |–— d d d «       y # 1 sw Y   Œbx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Údescription)ÚclientrA   r@   Ú_format_sqlr   Úadd_breadcrumbÚ
start_spanr   ÚDBÚitemsÚset_data)ÚhubÚcursorrH   Úparams_listÚ
paramstyleÚexecutemanyÚrecord_cursor_reprrK   Úspanr5   Úvs              r   Úrecord_sql_queriesr]   f   s<  è ø€ ð ‡z‚z�c—j‘j×(Ñ(¨Ñ8×<Ñ<Ø˜Uôñ ˜k¨d¨VÒ3ØˆKà˜Ò#Ø!‰JàˆØˆ
ä˜ Ó&€Eà€DØÐØ'ˆˆ[ÑØÐØ *ˆˆ_ÑÙØ!%ˆÐÑÙ˜fÐ0Ø"ˆˆ[Ñä	$Ó	&ñ GØ×Ñ 5°7ÀÐÔF÷Gð 
�‰œ2Ÿ5™5¨eˆÓ	4ð ¸Ø—J‘J“Lò 	 ‰DˆAˆqØ�M‰M˜!˜QÕð	 àŠ
÷ð ÷Gð Gú÷ð üs6   ‚BDÂC:Â)DÃ/DÃ1	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)rI   ÚtyperJ   rK   ÚhttpÚhttplib)r`   rJ   rK   Ú
subprocess)r`   rJ   rI   rK   )rL   r   ÚDB_REDISrP   rM   Ú_tagsÚHTTP_CLIENTÚ_data)rU   r[   s     r   Ú"maybe_create_breadcrumbs_from_spanrh   ”   s�   € à‡w�w”"—+‘+ÒØ×ÑØ×$Ñ$¨7¸WÈ4Ï:É:ð 	õ 	
ð 
�‰”B—N‘NÒ	"Ø×Ñ °ÀÇÁÐÕLØ	�‰�LÒ	 Ø×ÑØØ!Ø×$Ñ$Ø—‘ð	 	õ 	
ð 
!r   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)r3   ÚendswithÚSENTRY_TRACE_REGEXÚmatchÚgroupsrG   Úint)Úheaderrs   rn   ro   Úsampled_strrp   s         r   Úextract_sentrytrace_datarx   ¥   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)	Úhasattrrz   r1   ÚbytesÚdecodeÚ
connectionÚencodingÚ	Exceptionr   )rV   ÚsqlÚreal_sqls      r   rO   rO   Å   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Z ej                  d«      Z	 	 dd„Z	e
d„ «       Ze
d„ «       Ze
d„ «       Zd	„ Zd
„ Zdd„Zy)ÚBaggagezR
    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
        Ú Tú,ú=r    r(   FN)Úsplitr   Ústripr„   ÚSENTRY_PREFIX_REGEXrs   r   )	Úclsrv   r†   r‡   rˆ   Úitemr$   ÚvalÚbaggage_keys	            r   Úfrom_incoming_headerz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                 ó6  — i }d}d}t         j                  j                  j                  }|�|j                  €t        |«      S |j                  }|j                  }|�d|v r|d   |d<   |j                  d«      r|d   |d<   |j                  d«      r|d   |d<   |j                  d«      rt        |d   «      j                  |d<   |j                  d«      r|d   |d	<   |xr |j                  xs i }|j                  d
«      r|d
   |d<   t        |||«      S )Nr‹   Frn   ÚenvironmentÚreleaseÚdsnÚ
public_keyr=   Úsample_rateÚsegmentÚuser_segment)Ú
sentry_sdkÚHubÚcurrentrN   Ú_propagation_contextr„   rA   r@   r   rš   Ú_user)	r‘   Úscoper†   r‡   rˆ   rN   rA   Úpropagation_contextÚusers	            r   Úfrom_optionszBaggage.from_options  s+  € ð ˆØÐØˆä—‘×'Ñ'×.Ñ.ˆàˆ>˜U×7Ñ7Ð?Ü˜<Ó(Ð(à—.‘.ˆØ#×8Ñ8ÐàÐ*¨zÐ=PÑ/PØ':¸:Ñ'FˆL˜Ñ$à�;‰;�}Ô%Ø*1°-Ñ*@ˆL˜Ñ'à�;‰;�yÔ!Ø&-¨iÑ&8ˆL˜Ñ#à�;‰;�uÔÜ),¨W°U©^Ó)<×)GÑ)GˆL˜Ñ&à�;‰;Ð+Ô,Ø*1Ð2FÑ*GˆL˜Ñ'àÒ%˜%Ÿ+™+Ò,¨"ˆØ�8‰8�IÔØ+/°	©?ˆL˜Ñ(ä�|Ð%6¸Ó@Ð@r   c                 óŒ  — |j                   xs t        j                  j                  }|j                  }i }|st        |«      S |j                  xs i }|j                  xr |j                  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                  d«      r|d   |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.
        rn   r—   r˜   r™   rš   Útransactionrœ   r�   r›   ÚtrueÚfalseÚsampledF©rˆ   )rU   rž   rŸ   r    rN   r„   rA   r£   r¢   rn   r@   r   rš   ÚnameÚsourceÚLOW_QUALITY_TRANSACTION_SOURCESr›   r2   r«   Ú_baggager†   Úupdate)r‘   r¨   rU   rN   r†   rA   r¥   s          r   Úpopulate_from_transactionz!Baggage.populate_from_transaction-  s‘  € ð �o‰oÒ7¤§¡×!7Ñ!7ˆØ—‘ˆØˆáÜ˜<Ó(Ð(à—.‘.Ò& BˆØ—	‘	Ò-˜cŸi™iŸo™oÒ4°"ˆà#.×#7Ñ#7ˆ�ZÑ à�;‰;�}Ô%Ø*1°-Ñ*@ˆL˜Ñ'à�;‰;�yÔ!Ø&-¨iÑ&8ˆL˜Ñ#à�;‰;�uÔÜ),¨W°U©^Ó)<×)GÑ)GˆL˜Ñ&ð ×ÒØ×"Ñ"Ô*IÑIà*5×*:Ñ*:ˆL˜Ñ'à�8‰8�IÔØ+/°	©?ˆ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¬   r.   s    r   ÚfreezezBaggage.freeze`  s	   € àˆ�r   c                 óN   — i }t        | j                  «      D ]
  \  }}|||<   Œ |S r   )r
   r†   )r   rv   r$   r’   s       r   Údynamic_sampling_contextz Baggage.dynamic_sampling_contextd  s5   € àˆä" 4×#4Ñ#4Ó5ò 	‰IˆC�ØˆF�3ŠKð	ð ˆr   c                 ód  — g }t        | 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   r2   Úappendr‡   Újoin)r   Úinclude_third_partyrS   r$   r“   r’   s         r   Ú	serializezBaggage.serializem  sœ   € àˆä! $×"3Ñ"3Ó4ò 	#‰HˆC�Ü,Ó.ñ #Ü×,Ñ,¬u°S«zÑ9¸CÑ?Ä%ÌÈCËÃ/ÑQ�Ø—‘˜TÔ"÷#ð #ð	#ñ
 Ø�L‰L˜×/Ñ/Ô0à�x‰x˜‹Ð÷#ð #ús   ¨AB&Â&B/	N)r‹   T©F)r8   r9   r:   Ú__doc__Ú	__slots__r¸   ÚreÚcompiler�   r   Úclassmethodr•   r¦   r²   r´   r¶   r¼   r)   r   r   r„   r„   Ù   sƒ   „ ñð A€Ià€MØ$˜"Ÿ*™* ZÓ0Ðð
 Øó	ð ñAó ðAð4 ñ"Aó ð"AðH ñ04ó ð04òdòôr   r„   c                 ón   — | j                   }|j                  d   }t        | |«      ryt        ||d¬«      S )zv
    Returns True if url matches trace_propagation_targets configured in the given hub. Otherwise, returns False.
    Útrace_propagation_targetsFT)Úsubstring_matching)rN   rA   r   r   )rU   ÚurlrN   rÄ   s       r   Úshould_propagate_tracerÇ   |  s:   € ð
 �Z‰Z€FØ &§¡Ð/JÑ KÐä�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.
    r7   é   Nr!   r    )rS   r3   r"   Úlower)Úincoming_datarK   r$   Úvalues       r   Únormalize_incoming_datarÍ   Š  se   € ð
 €DØ#×)Ñ)Ó+ò ‰
ˆˆUØ�>‰>˜'Ô"Ø�a�b�'ˆCà�k‰k˜#˜sÓ#×)Ñ)Ó+ˆØˆˆSŠ	ðð €Kr   )r¯   r½   )-rÀ   Ú
contextlibrž   Úsentry_sdk.constsr   Úsentry_sdk.utilsr   r   r   r   r   Úsentry_sdk._compatr	   r
   Úsentry_sdk._typesr   Úcollectionsr   Úurllibr   r   Úcollections.abcÚurllib.parseÚtypingr   r   r   r   r   rÁ   rr   Úbase64_strippedr   rB   Úcontextmanagerr]   rh   rx   rO   Úobjectr„   rÇ   rÍ   Úsentry_sdk.tracingr¯   r)   r   r   ú<module>rÜ      sÌ   ðÛ 	Û ã Ý  ÷õ ÷ .Ý +áÝ#ß%Ð%å'ß+áÛåÝÝ ÝÝð  �R—Z‘ZðóÐ ðð ô(�Wô (ò>ð$ ×Ñð ò*ó ð*òZ
ò"ò@&ô(`ˆfô `òFUòö" ?r   