U 췀g@sddlmZddlmZmZmZddlmZmZm Z m Z m Z m Z ddl mZmZmZddlmZmZddlmZddlmZmZddlmZmZdd lmZerdd lmZmZGd d d e Z d S))trace)Context get_current set_value)CarrierTGetterSetterTextMapPropagatordefault_getterdefault_setter)NonRecordingSpan SpanContext TraceFlags)SENTRY_BAGGAGE_KEYSENTRY_TRACE_KEY)SentrySpanProcessor)BAGGAGE_HEADER_NAMESENTRY_TRACE_HEADER_NAME)Baggageextract_sentrytrace_data) TYPE_CHECKING)OptionalSetc@s8eZdZdZdefddZdefddZeddZ dS) SentryPropagatorz[ Propagates tracing headers for Sentry's tracing system in a way OTel understands. Nc Cs|dkrt}||t}|s"|St|d}|s6|Stt||}|d|d}}tt|dt|dttj dd}||t } | rt | d} n t id} | tt| |}t|} t| |} | S)Nrtrace_idZparent_span_idT)rspan_idZ trace_flagsZ is_remote)Z sentry_items)rgetrrrrr intrZSAMPLEDrrZfrom_incoming_headerfreezerr rZset_span_in_context) selfcarriercontextgetterZ sentry_traceZ sentrytracerrZ span_contextZbaggage_headerbaggagespanZmodified_contextr&^/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/opentelemetry/propagator.pyextract-s2       zSentryPropagator.extractc Cs|dkrt}t|}|}|js*dSt|j}tj}| |d}|sRdS| |t | |j r|j } | r| } | r| |t| dSN)rrZget_current_spanZget_span_contextZis_validZformat_span_idrrZ otel_span_maprsetrZto_traceparentZcontaining_transactionZ get_baggage serializer) r r!r"setterZ current_spanZcurrent_span_contextrZspan_mapZ sentry_spanr$Z baggage_datar&r&r'injectWs$    zSentryPropagator.injectcCstthSr))rr)r r&r&r'fieldsrszSentryPropagator.fields) __name__ __module__ __qualname____doc__r r(r r-propertyr.r&r&r&r'r(s *rN)!Z opentelemetryrZopentelemetry.contextrrrZ!opentelemetry.propagators.textmaprrrr r r Zopentelemetry.tracer r rZ,sentry_sdk.integrations.opentelemetry.constsrrZ4sentry_sdk.integrations.opentelemetry.span_processorrZsentry_sdk.tracingrrZsentry_sdk.tracing_utilsrrtypingrrrrr&r&r&r's