§ <ˆj+tã ó´—ddlZddlZddlmZmZddlZddlmZddlmZm Z m Z ddl m Z ddlm Z ddlmZer6ddlZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlZddlmZmZmZdZdZdZdZdZdZ dZ!dZ"egZ#e!e!e!eee!eeedœ Z$Gd„de%¦«Z&Gd„de%¦«Z'Gd„de'¦«Z(Gd„de'¦«Z)d"d „Z*dd!l+m,Z,m-Z-m.Z.m/Z/m0Z0dS)#éN)ÚdatetimeÚ timedelta)Ú INSTRUMENTER)Úis_valid_sample_rateÚloggerÚnanosecond_time)ÚPY2)ÚSPANDATA)Ú TYPE_CHECKING)ÚAny)ÚDict)ÚIterator)ÚList)ÚOptional)ÚTuple)ÚEventÚMeasurementUnitÚSamplingContextÚbaggagez sentry-traceÚcustomÚurlÚrouteÚviewÚ componentÚtask) ÚendpointÚ function_nameÚ handler_nameÚmethod_and_path_patternÚpathÚ route_nameÚ route_patternÚ uri_templatercó"—eZdZdZdZd„Zd„ZdS)Ú _SpanRecorderz5Limits the number of spans recorded in a transaction.©ÚmaxlenÚspanscó(—|dz |_g|_dS)Nér&©Úselfr's úI/opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk/tracing.pyÚ__init__z_SpanRecorder.__init__@s€ð˜q‘jˆŒ ؈Œ ˆ ˆ ócó†—t|j¦«|jkr d|_dS|j |¦«dS©N)Úlenr(r'Ú_span_recorderÚappend)r,Úspans r-Úaddz_SpanRecorder.addJsA€å ˆtŒz‰?Œ?˜Tœ[Ò (Ð (Ø"&ˆDÔ Ð Ð à ŒJ× Ò ˜dÑ #Ô #Ð #Ð #Ð #r/N)Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__r.r6©r/r-r%r%;s=€€€€€Ø?Ð?à#€Iðððð$ð$ð$ð$ð$r/r%có—eZdZdZd„Z dd„Zd„Zd„Zd„Zd „Z e d „¦«Z e j fd „Zd „Zed „¦«Zed„¦«Zd„Zed„¦«Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zdd„Zd„Zd„ZdS)ÚSpan)Útrace_idÚspan_idÚparent_span_idÚsame_process_as_parentÚsampledÚopÚ descriptionÚstart_timestampÚ_start_timestamp_monotonic_nsÚstatusÚ timestampÚ_tagsÚ_datar3ÚhubÚ_context_manager_stateÚ_containing_transactionc ó|—d|vrt t¦«St |¦«S)z_ Backwards-compatible implementation of Span and Transaction creation. Ú transaction)ÚobjectÚ__new__Ú Transaction)ÚclsÚkwargss r-rRz Span.__new__gs3€ð ˜FÐ "Ð "Ý—>’>¥+Ñ.Ô.Ð .Ý�~Š~˜cÑ"Ô"Ð"r/NTc ó¸—|ptj¦«j|_|ptj¦«jdd…|_||_||_||_||_||_ | |_ ||_ i|_ i|_ | |_| ptj¦«|_ t%¦«|_n#t($rYnwxYwd|_d|_dS)Né)ÚuuidÚuuid4Úhexr?r@rArBrCrDrErHrLrJrKrNrÚutcnowrFrrGÚAttributeErrorrIr3) r,r?r@rArBrCrDrErLrHrPÚcontaining_transactionrFs r-r.z Span.__init__usæ€ð !Ð4¥D¤J¡L¤LÔ$4ˆŒ ØÐ7¥$¤*¡,¤,Ô"2°2°3°3Ô"7ˆŒ Ø,ˆÔØ&<ˆÔ#؈Œ ؈ŒØ&ˆÔ؈Œ ؈ŒØˆŒ ؈Œ Ø'=ˆÔ$Ø.ÐCµ(´/Ñ2CÔ2CˆÔð õ2AÑ1BÔ1BˆDÔ .Ð .øÝð ð ð Ø ˆDð øøøðˆŒà"ˆÔÐÐsÂ(B<Â< C ÃC có@—|j€t|¦«|_dSdSr1)r3r%r+s r-Úinit_span_recorderzSpan.init_span_recorder s)€à Ô Ð &Ý"/°Ñ"7Ô"7ˆDÔ Ð Ð ð 'Ð &r/có‚—d|jj›d|j›d|j›d|j›d|j›d|j›d|j›d�S) Nú)Ú __class__r7rDrEr?r@rArC©r,s r-Ú__repr__z Span.__repr__¥sZ€€ð ”Ô'Ð'Ð'Ø”��ØÔ Ð Ð Ø” � � Ø” � � ØÔ#Ð#Ð#Ø” � � ð ð r/có†—|jptjj}|jd\}}|j}||_|||f|_|S)Néÿÿÿÿ)rLÚ sentry_sdkÚHubÚcurrentÚ_stackr5rM)r,rLÚ_ÚscopeÚold_spans r-Ú __enter__zSpan.__enter__´sD€àŒhÐ0�*œ.Ô0ˆà”:˜b”>‰ˆˆ5Ø”:ˆØˆŒ Ø'*¨E°8Ð&<ˆÔ#؈ r/có†—|�| d¦«|j\}}}|`| |¦«||_dS)NÚinternal_error)Ú set_statusrMÚfinishr5)r,ÚtyÚvalueÚtbrLrqrrs r-Ú__exit__z Span.__exit__¾sM€à Ð Ø �OŠOÐ,Ñ -Ô -Ð -à#Ô:шˆU�HØ Ð 'à � Š �CÑÔÐØˆŒ ˆ ˆ r/có—|jSr1)rNrhs r-r]zSpan.containing_transactionÉs €ðÔ+Ð+r/c óR—|jptjj}|j}|o |jd}||krt ¦«S| d|j¦«td|j |j |j dœ|¤Ž}|j o |j j }|r| |¦«|S)a Start a sub-span from the current span or transaction. Takes the same arguments as the initializer of :py:class:`Span`. The trace id, sampling decision, transaction pointer, and span recorder are inherited from the current span/transaction. Ú instrumenterrC)r?rAr]r<)rLrlrmrnÚclientÚoptionsÚNoOpSpanÚ setdefaultrCr>r?r@r]r3r6)r,r~rUrLrÚconfiguration_instrumenterÚchildÚ span_recorders r-Ú start_childzSpan.start_childÒsÊ€ðŒhÐ0�*œ.Ô0ˆØ”ˆØ%+Ð%N°´¸~Ô0NÐ"à Ð5Ò 5Ð 5Ý‘:”:Ð à×Ò˜) T¤\Ñ2Ô2Ð2åð Ø”]Øœ<Ø#'Ô#>ð ð ðð  ð ˆð Ô 'Ð V¨DÔ,GÔ,Vð ð ð %Ø × Ò ˜eÑ $Ô $Ð $؈ r/c óD—tjd¦«|jdi|¤ŽS)zGDeprecated: use :py:meth:`sentry_sdk.tracing.Span.start_child` instead.z:Deprecated: use Span.start_child instead of Span.new_span.r<)rÚwarningr†©r,rUs r-Únew_spanz Span.new_spanòs.€õ ŒÐSÑTÔTÐT؈tÔÐ)Ð) &Ð)Ð)Ð)r/c óz—|turtjd¦«tjt |¦«fi|¤ŽS)a¨ Create a Transaction with the given params, then add in data pulled from the 'sentry-trace' and 'baggage' headers from the environ (if any) before returning the Transaction. This is different from `continue_from_headers` in that it assumes header names in the form "HTTP_HEADER_NAME" - such as you would get from a wsgi environ - rather than the form "header-name". zXDeprecated: use Transaction.continue_from_environ instead of Span.continue_from_environ.)r>rrˆrSÚcontinue_from_headersÚEnvironHeaders)rTÚenvironrUs r-Úcontinue_from_environzSpan.continue_from_environøsI€ð •$ˆ;ˆ;Ý ŒNð9ñ ô ð õÔ0µÀÑ1HÔ1HÐSÐSÈFÐSÐSÐSr/c óš—|turtjd¦«tj| t ¦«¦«}| t |i¦«t| t¦«¦«}|�)| |¦«|  ¦«tdi|¤Ž}d|_ |S)z� Create a transaction with the given params (including any data pulled from the 'sentry-trace' and 'baggage' headers). zXDeprecated: use Transaction.continue_from_headers instead of Span.continue_from_headers.NFr<) r>rrˆÚBaggageÚfrom_incoming_headerÚgetÚBAGGAGE_HEADER_NAMEÚupdateÚextract_sentrytrace_dataÚSENTRY_TRACE_HEADER_NAMEÚfreezerSrB)rTÚheadersrUrÚsentrytrace_kwargsrPs r-rŒzSpan.continue_from_headerssË€ð •$ˆ;ˆ;Ý ŒNð9ñ ô ð õÔ.¨w¯{ª{Õ;NÑ/OÔ/OÑPÔPˆØ� Š Õ*¨GÐ4Ñ5Ô5Ð5å5Ø �KŠKÕ0Ñ 1Ô 1ñ ô Ðð Ð )Ø �MŠMÐ,Ñ -Ô -Ð -ð �NŠNÑ Ô Ð å!Ð+Ð+ FÐ+Ð+ˆ Ø-2ˆ Ô*àÐr/c#óÊK—t| ¦«fV—|jr:|j ¦« ¦«}|rt |fV—dSdSdS)zí Creates a generator which returns the span's `sentry-trace` and `baggage` headers. If the span's containing transaction doesn't yet have a `baggage` value, this will cause one to be generated and stored. N)r—Úto_traceparentr]Ú get_baggageÚ serializer”)r,rs r-Ú iter_headerszSpan.iter_headers7sƒèè€õ'¨×(;Ò(;Ñ(=Ô(=Ð=Ð=Ð=Ð=à Ô &ð 3ØÔ1×=Ò=Ñ?Ô?×IÒIÑKÔKˆGØð 3Ý)¨7Ð2Ð2Ð2Ð2Ð2Ð2ð 3ð 3ð 3ð 3r/c ó\—tjd¦«|sdS|jt|ifi|¤ŽS)a DEPRECATED: Use :py:meth:`sentry_sdk.tracing.Transaction.continue_from_headers`. Create a `Transaction` with the given params, then add in data pulled from the given 'sentry-trace' header value before returning the `Transaction`. zwDeprecated: Use Transaction.continue_from_headers(headers, **kwargs) instead of from_traceparent(traceparent, **kwargs)N)rrˆrŒr—)rTÚ traceparentrUs r-Úfrom_traceparentzSpan.from_traceparentEsY€õ Œð Añ ô ð ð ð Ø�4à(ˆsÔ(Ý % {Ð 3ð ð Ø7=ð ð ð r/cóp—|jdurd}n|jdurd}nd}|j›d|j›�}|�|d|›�z }|S)NTÚ1FÚ0ú-)rCr?r@)r,rCr¡s r-rœzSpan.to_traceparent^s`€à Œ<˜4РР؈GˆGØ Œ\˜UÐ "Ð "؈GˆGàˆGà!%¤  °´ ° Ð=ˆ Ø Ð Ø ˆK G GÐ-Ñ -ˆKàÐr/cóF—|jr|j ¦«SdSr1)r]r�rhs r-Ú to_baggagezSpan.to_baggagems'€à Ô &ð =ØÔ.×:Ò:Ñ<Ô<Ð <؈tr/có—||j|<dSr1)rJ©r,Úkeyrys r-Úset_tagz Span.set_tagsó€àˆŒ �3‰ˆˆr/có—||j|<dSr1)rKrªs r-Úset_dataz Span.set_datawr­r/có—||_dSr1©rH©r,rys r-rvzSpan.set_status{s €àˆŒ ˆ ˆ r/có–—| dt|¦«¦«| tj|¦«|dkr| d¦«dSd|cxkrdkrÈnnÅ|dkr| d¦«dS|dkr| d¦«dS|d kr| d ¦«dS|d kr| d ¦«dS|d kr| d¦«dS|dkr| d¦«dS| d¦«dSd|cxkrdkrqnnn|dkr| d¦«dS|dkr| d¦«dS|dkr| d¦«dS| d¦«dS| d¦«dS)Nzhttp.status_codei�Úokiôi“Úpermission_deniedi”Ú not_foundi­Úresource_exhaustedi�Úfailed_preconditioni‘Úunauthenticatedi™Úalready_existsÚinvalid_argumentiXiøÚdeadline_exceedediõÚ unimplementedi÷Ú unavailableruÚ unknown_error)r¬Ústrr¯r ÚHTTP_STATUS_CODErv©r,Ú http_statuss r-Úset_http_statuszSpan.set_http_statuss0€à � Š Ø ¥ KÑ 0Ô 0ñ ô ð ð � Š •hÔ/°Ñ=Ô=Ð=à ˜Ò Ð Ø �OŠO˜DÑ !Ô !Ð !Ð !Ð !Ø �KÐ %Ð %Ò %Ð % #Ò %Ð %Ð %Ð %Ð %ؘcÒ!Ð!Ø—’Ð 3Ñ4Ô4Ð4Ð4Ð4Ø Ò#Ð#Ø—’  Ñ,Ô,Ð,Ð,Ð,Ø Ò#Ð#Ø—’Ð 4Ñ5Ô5Ð5Ð5Ð5Ø Ò#Ð#Ø—’Ð 5Ñ6Ô6Ð6Ð6Ð6Ø Ò#Ð#Ø—’Ð 1Ñ2Ô2Ð2Ð2Ð2Ø Ò#Ð#Ø—’Ð 0Ñ1Ô1Ð1Ð1Ð1à—’Ð 2Ñ3Ô3Ð3Ð3Ð3Ø �KÐ %Ð %Ò %Ð % #Ò %Ð %Ð %Ð %Ð %ؘcÒ!Ð!Ø—’Ð 3Ñ4Ô4Ð4Ð4Ð4Ø Ò#Ð#Ø—’ Ñ0Ô0Ð0Ð0Ð0Ø Ò#Ð#Ø—’  Ñ.Ô.Ð.Ð.Ð.à—’Ð 0Ñ1Ô1Ð1Ð1Ð1à �OŠO˜OÑ ,Ô ,Ð ,Ð ,Ð ,r/có—|jdkS)Nr´r±rhs r-Ú is_successzSpan.is_success£s€àŒ{˜dÒ"Ð"r/có@—|j�dS|p|jptjj} |r||_n6t ¦«|jz }|jt|dz ¬¦«z|_n(#t$rtj ¦«|_YnwxYwt||¦«dS)Niè)Ú microseconds) rIrLrlrmrnrrGrFrr\rr[Ú"maybe_create_breadcrumbs_from_span)r,rLÚ end_timestampÚelapseds r-rwz Span.finish§s¿€ð Œ>Ð %à�4àÐ7�T”XÐ7¥¤Ô!7ˆð /Øð Ø!.�”�å)Ñ+Ô+¨dÔ.PÑP�Ø!%Ô!5½ Ø!(¨4¡ð9ñ9ô9ñ"�”øøõð /ð /ð /Ý%œ_Ñ.Ô.ˆDŒNˆNˆNð /øøøõ +¨3°Ñ5Ô5Ð5؈ts¥AA&Á&"B  B c óЗ|j|j|j|j|j|j|j|jdœ}|jr|j|j d<|j }|r||d<|j }|r||d<|S)N)r?r@rArBrDrErFrIrHÚtagsÚdata) r?r@rArBrDrErFrIrHrJrK)r,ÚrvrÍrÎs r-Úto_jsonz Span.to_json¿s‹€ðœ Ø”|Ø"Ô1Ø&*Ô&AØ”'ØÔ+Ø#Ô3Øœð  ð  ˆð Œ;ð /Ø#'¤;ˆDŒJ�xÑ àŒzˆØ ð ØˆBˆv‰JàŒzˆØ ð ØˆBˆv‰Jàˆ r/cóÔ—|j|j|j|j|jdœ}|jr |j|d<|jr.|j ¦« ¦«|d<|S)N)r?r@rArDrErHÚdynamic_sampling_context) r?r@rArDrErHr]r�rÒ)r,rÏs r-Úget_trace_contextzSpan.get_trace_contextÙs‚€ðœ Ø”|Ø"Ô1Ø”'ØÔ+ð  ð ˆð Œ;ð 'Øœ;ˆBˆx‰Là Ô &ð UðÔ+×7Ò7Ñ9Ô9×RÒRÑTÔTð Ø*ñ ðˆ r/) NNNTNNNNNNNN©NN)r7r8r9r;rRr.r_rirsr{Úpropertyr]rÚSENTRYr†rŠÚ classmethodr�rŒrŸr¢rœr¨r¬r¯rvrÄrÆrwrÐrÓr<r/r-r>r>Rs耀€€€ð€Ið( #ð #ð #ð ØØØ#ØØ ØØ ØØØ#Øð'#ð'#ð'#ð'#ðV8ð8ð8ð  ð  ð  ðððð ð ð ðð,ð,ñ„Xð,ð(4Ô':ððððð@*ð*ð*ð ðTðTñ„[ðTð,ð%ð%ñ„[ð%ðN 3ð 3ð 3ðð ð ñ„[ð ð0 ð ð ðððð  ð ð ð ð ð ðððð"-ð"-ð"-ðH#ð#ð#ððððð0ððð4ððððr/r>c󄇗eZdZdZdddefd„Zd„Zˆfd„Zˆfd„Ze d„¦«Z dd „Z dd „Z d „Z ˆfd „Zd „Zd„ZˆxZS)rS)ÚnameÚsourceÚparent_sampledÚ sample_rateÚ _measurementsÚ _contextsÚ_profileÚ_baggageÚNc óø—|s-d|vr)tjd¦«| d¦«}tj|fi|¤Ž||_||_d|_||_i|_ i|_ d|_ ||_ dS)NrPz^Deprecated: use Transaction(name=...) to create transactions instead of Span(transaction=...).) rrˆÚpopr>r.rÙrÚrÜrÛrÝrÞrßrà)r,rÙrÛrrÚrUs r-r.zTransaction.__init__ús™€ðð -˜ ¨Ð/Ð/Ý ŒNð4ñ ô ð ð—:’:˜mÑ,Ô,ˆDå Œ �dÐ%Ð%˜fÐ%Ð%Ð%àˆŒ ؈Œ ØˆÔØ,ˆÔØˆÔØˆŒØˆŒ ؈Œ ˆ ˆ r/có’—d|jj›d|j›d|j›d|j›d|j›d|j›d|j›d|j›d �S) Nraz(name=z, op=rbrcrdrez , source=rf) rgr7rÙrDr?r@rArCrÚrhs r-rizTransaction.__repr__s`€€ð ”Ô'Ð'Ð'Ø” � � Ø”��Ø” � � Ø” � � ØÔ#Ð#Ð#Ø” � � Ø” � � ð ð r/có–•—tt|¦« ¦«|j�|j ¦«|Sr1)ÚsuperrSrsrß)r,rgs €r-rszTransaction.__enter__(s@ø€å �k˜4Ñ Ô ×*Ò*Ñ,Ô,Ð,à Œ=Ð $Ø ŒM× #Ò #Ñ %Ô %Ð %àˆ r/c󢕗|j�|j |||¦«tt|¦« |||¦«dSr1)rßr{rærS)r,rxryrzrgs €r-r{zTransaction.__exit__1sMø€à Œ=Ð $Ø ŒM× "Ò " 2 u¨bÑ 1Ô 1Ð 1å �k˜4Ñ Ô ×)Ò)¨"¨e°RÑ8Ô8Ð8Ð8Ð8r/có—|Sr1r<rhs r-r]z"Transaction.containing_transaction8s €ðˆ r/c ó²—|j�dS|p|jptjj}|j}|€dS|j€itjd¦«|j rLt|j ¦«r8|j r|j j dkrd}nd}|j  |d¬¦«dS|jstjd¦«d|_t" |||¦«|js|j€tjd ¦«dSd „|jjD¦«}d|_i}| |j¦«| d | ¦«i¦«d|jd |ji||j|j|j|d œ}|j�*|j ¦«r|j|d<d|_|j|d<| |¦«S)Nz.Discarding transaction because sampled = Falser*Ú backpressurerÜrP)Ú data_categoryzCTransaction has no name, falling back to ``.zz1Discarding transaction without sampling decision.cóD—g|]}|j® | ¦«‘ŒSr1)rIrÐ)Ú.0r5s r-ú z&Transaction.finish..os2€ð ð ð àØŒ~Ð)ð �LŠL‰NŒNà)Ð)Ð)r/ÚtracerÚ)ÚtyperPÚtransaction_infoÚcontextsrÍrIrFr(ÚprofileÚ measurements)rIrLrlrmrnrr3rÚdebugÚ transportÚhas_tracing_enabledr€ÚmonitorÚdownsample_factorÚrecord_lost_eventrÙrˆr>rwrCr(r•rÞrÓrÚrJrFrßÚvalidrÝÚ capture_event)r,rLrÊrÚreasonÚfinished_spansròÚevents r-rwzTransaction.finishAs€à Œ>Ð %à�4àÐ7�T”XÐ7¥¤Ô!7ˆØ”ˆà ˆ>à�4ð Ô Ð &Ý ŒLÐIÑ JÔ JÐ Jð Ôð XÕ$7¸¼Ñ$GÔ$Gð XØ”>ð+ f¤nÔ&FÈÒ&JÐ&JØ+�F�Fà*�FàÔ ×2Ò2°6ÈÐ2ÑWÔWÐWà�4àŒyð 2Ý ŒNØUñ ô ð ð2ˆDŒIå � Š �D˜#˜}Ñ-Ô-Ð-àŒ|ð ðŒ|Ð#Ý”ÐRÑSÔSÐSà�4ð ð àÔ+Ô1ð ñ ô ˆð#ˆÔàˆØ�Š˜œÑ'Ô'Ð'Ø�Š˜ $×"8Ò"8Ñ":Ô":Ð;Ñ<Ô<Ð<ð"Øœ9Ø!)¨4¬;Ð 7Ø Ø”JØœØ#Ô3Ø#ð  ð  ˆð Œ=Ð $¨¬×)<Ò)<Ñ)>Ô)>Ð $Ø#œ}ˆE�)Ñ Ø ˆDŒMà $Ô 2ˆˆnÑà× Ò  Ñ'Ô'Ð'r/có —||dœ|j|<dS)N)ryÚunit)rÝ)r,rÙryrs r-Úset_measurementzTransaction.set_measurement’s€à-2¸DÐ#AÐ#AˆÔ˜4Ñ Ð Ð r/có—||j|<dSr1)rÞrªs r-Ú set_contextzTransaction.set_context–s€à#ˆŒ�sÑÐÐr/có’•—tt|¦« ¦«}|j|d<|j|d<|j|d<|S)NrÙrÚrC)rærSrÐrÙrÚrC)r,rÏrgs €r-rÐzTransaction.to_jsonšsDø€å •; Ñ %Ô %× -Ò -Ñ /Ô /ˆà”Yˆˆ6‰ Ø”{ˆˆ8‰ Øœ ˆˆ9‰ àˆ r/cóh—|jr |jjrtj|¦«|_|jS)zd The first time a new baggage with sentry items is made, it will be frozen. )ràÚmutabler‘Úpopulate_from_transactionrhs r-r�zTransaction.get_baggage¤s6€ð Œ}ð D ¤ Ô 5ð DÝ#Ô=¸dÑCÔCˆDŒMàŒ}Ðr/c óp—|jptjj}|j}|r|jpi}d |jr d|jzdznd|j¬¦«}|rt|¦«s d|_ dS|j �t|j ¦«|_ dSt| d¦«¦«r|d|¦«n|d �|d n|d }t|d ¬ ¦«s1t!jd  |¬¦«¦«d|_ dSt|¦«|_ |jr|xj |jjzc_ |j sVt!jd |t| d¦«¦«rdnd¬¦«¦«d|_ dSt+j¦«|j k|_ |j r*t!jd |¬¦«¦«dSt!jd ||j ¬¦«¦«dS)aO Sets the transaction's sampling decision, according to the following precedence rules: 1. If a sampling decision is passed to `start_transaction` (`start_transaction(name: "my transaction", sampled: True)`), that decision will be used, regardless of anything else 2. If `traces_sampler` is defined, its decision will be used. It can choose to keep or ignore any parent sampling decision, or use the sampling context data to make its own decision or to choose a sample rate for the transaction. 3. If `traces_sampler` is not defined, but there's a parent sampling decision, the parent sampling decision will be used. 4. If `traces_sampler` is not defined and there's no parent sampling decision, `traces_sample_rate` will be used. z{op}transaction <{name}>raz> rá)rDrÙFNÚtraces_samplerrÛÚtraces_sample_rateÚTracing)rÚzN[Tracing] Discarding {transaction_description} because of invalid sample rate.)Útransaction_descriptionz?[Tracing] Discarding {transaction_description} because {reason}z"traces_sampler returned 0 or Falseztraces_sample_rate is set to 0)r rýz,[Tracing] Starting {transaction_description}z}[Tracing] Discarding {transaction_description} because it's not included in the random sample (sampling rate = {sample_rate}))r rÜ)rLrlrmrnrr€ÚformatrDrÙr÷rCÚfloatrÜÚcallabler“rrrˆrørùrõÚrandom)r,Úsampling_contextrLrr€r rÜs r-Ú_set_initial_sampling_decisionz*Transaction._set_initial_sampling_decision¯s°€ð,ŒhÐ0�*œ.Ô0ˆØ”ˆØÐ,˜fœnÐ3°ˆØ"<×"CÒ"CØ(,¬Ð7��d”g‘  Ñ$Ð$°R¸t¼yð#Dñ# ô# Ðð ð Õ0°Ñ9Ô9ð Ø ˆDŒLØ ˆFð Œ<Ð #Ý$ T¤\Ñ2Ô2ˆDÔ Ø ˆFõ˜Ÿ š Ð$4Ñ5Ô5Ñ6Ô6ð Ð %ˆGÐ$Ô %Ð&6Ñ 7Ô 7Ð 7ð $Ð$4Ô5ÐAð!Ð!1Ô2Ð2àÐ1Ô2ð õ$ K¸ ÐBÑBÔBð Ý ŒNØ`×gÒgØ,Cðhñôñ ô ð ð !ˆDŒLØ ˆFå  Ñ-Ô-ˆÔà Œ>ð AØ Ð Ô  ¤Ô @Ñ @Ð Ô ðÔð Ý ŒLØQ×XÒXØ,Cõ$ G§K¢KÐ0@Ñ$AÔ$AÑBÔBð>Ð<Ð<à=ð Yñôñ ô ð ð!ˆDŒLØ ˆFõ ”}‘”¨Ô)9Ò9ˆŒ à Œ<ð Ý ŒLØ>×EÒEØ,CðFñôñ ô ð ð ð õ ŒLðP÷WòWØ,CØ $Ô 0ðWñôñ ô ð ð ð r/rÔ)rá)r7r8r9r;ÚTRANSACTION_SOURCE_CUSTOMr.rirsr{rÕr]rwrrrÐr�rÚ __classcell__)rgs@r-rSrSís"ø€€€€€ð €IðØØØ(ð  ð ð ð ð< ð ð ð ððððð9ð9ð9ð9ð9ðððñ„XððO(ðO(ðO(ðO(ðbBðBðBðBð$ð$ð$ðððððð ð ð ðhðhðhðhðhðhðhr/rScór—eZdZd„Zejfd„Zd„Zd„Zd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zdd„ZdS)r�có—|jjSr1)rgr7rhs r-rizNoOpSpan.__repr__s €àŒ~Ô&Ð&r/c ó—t¦«Sr1)r�)r,r~rUs r-r†zNoOpSpan.start_childs €å‰zŒzÐr/c ó—|jdi|¤ŽS©Nr<)r†r‰s r-rŠzNoOpSpan.new_span#s€àˆtÔÐ)Ð) &Ð)Ð)Ð)r/có—dS)Nrár<rhs r-rœzNoOpSpan.to_traceparent's€àˆrr/có—dSr1r<rhs r-r¨zNoOpSpan.to_baggage+ó€àˆtr/có —td¦«Sr)Úiterrhs r-rŸzNoOpSpan.iter_headers/s €å�B‰xŒxˆr/có—dSr1r<rªs r-r¬zNoOpSpan.set_tag3ó€à ˆr/có—dSr1r<rªs r-r¯zNoOpSpan.set_data7r!r/có—dSr1r<r²s r-rvzNoOpSpan.set_status;r!r/có—dSr1r<rÂs r-rÄzNoOpSpan.set_http_status?r!r/có—dS)NTr<rhs r-rÆzNoOpSpan.is_successCrr/có—iSr1r<rhs r-rÐzNoOpSpan.to_jsonGó€àˆ r/có—iSr1r<rhs r-rÓzNoOpSpan.get_trace_contextKr'r/Ncó—dSr1r<)r,rLrÊs r-rwzNoOpSpan.finishOr!r/rÔ)r7r8r9rirrÖr†rŠrœr¨rŸr¬r¯rvrÄrÆrÐrÓrwr<r/r-r�r�sø€€€€€ð'ð'ð'ð(4Ô':ððððð*ð*ð*ðððððððððð ð ð ð ð ð ð ð ð ð ð ð ðððððððððð ð ð ð ð ð r/r�cóH—trddlm}nddlm}|r ||¦«S|S)av Decorator to start a child span under the existing current transaction. If there is no current transaction, then nothing will be traced. .. code-block:: :caption: Usage import sentry_sdk @sentry_sdk.trace def my_function(): ... @sentry_sdk.trace async def my_async_function(): ... r)Ústart_child_span_decorator)r Úsentry_sdk.tracing_utils_py2r+Úsentry_sdk.tracing_utils_py3)Úfuncr+s r-rïrïTsU€õ& ðLØKÐKÐKÐKÐKÐKÐKàKÐKÐKÐKÐKÐKð ð*Ø)Ð)¨$Ñ/Ô/Ð/à)Ð)r/)r‘r�r–r÷rÉr1)1rXrrrrlÚsentry_sdk.constsrÚsentry_sdk.utilsrrrÚsentry_sdk._compatr r Úsentry_sdk._typesr Útypingr r rrrrÚsentry_sdk.profilerrrrr”r—rÚTRANSACTION_SOURCE_URLÚTRANSACTION_SOURCE_ROUTEÚTRANSACTION_SOURCE_VIEWÚTRANSACTION_SOURCE_COMPONENTÚTRANSACTION_SOURCE_TASKÚLOW_QUALITY_TRANSACTION_SOURCESÚSOURCE_FOR_STYLErQr%r>rSr�rïÚsentry_sdk.tracing_utilsr‘r�r–r÷rÉr<r/r-úr=sÖðØ € € € Ø € € € à(Ð(Ð(Ð(Ð(Ð(Ð(Ð(àÐÐÐØ*Ð*Ð*Ð*Ð*Ð*ØJÐJÐJÐJÐJÐJÐJÐJÐJÐJØ"Ð"Ð"Ð"Ð"Ð"Ø&Ð&Ð&Ð&Ð&Ð&Ø+Ð+Ð+Ð+Ð+Ð+ðð JØ€M€M€MàÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐàÐÐÐØIÐIÐIÐIÐIÐIÐIÐIÐIÐIð ÐØ)Ðð %ÐØÐØ"ÐØ ÐØ*ÐØ Ððð#Ðð -Ø1Ø0Ø7Ø "Ø.Ø-Ø,Ø #ð ð Ðð$ð$ð$ð$ð$�Fñ$ô$ð$ð.XðXðXðXðXˆ6ñXôXðXðv jðjðjðjðj�$ñjôjðjðZ 7 ð7 ð7 ð7 ð7 ˆtñ7 ô7 ð7 ðt*ð*ð*ð*ðDðððððððððððððððr/