o
    i                     @   s   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZmZ z,d dlmZ d dlmZmZmZ d dlmZmZmZmZmZmZ d d	lmZmZmZ W n ey[   ed
w d dlm Z  e rld dlm!Z!m"Z" G dd deZ#dS )    )DidNotEnable)SENTRY_BAGGAGE_KEYSENTRY_TRACE_KEY)SentrySpanProcessor)BAGGAGE_HEADER_NAMESENTRY_TRACE_HEADER_NAME)Baggageextract_sentrytrace_data)trace)Contextget_current	set_value)CarrierTGetterSetterTextMapPropagatordefault_getterdefault_setter)NonRecordingSpanSpanContext
TraceFlagszopentelemetry not installed)TYPE_CHECKING)OptionalSetc                   @   sZ   e Zd ZdZdef								
dddZdef								dddZedddZ	dS )SentryPropagatorz[
    Propagates tracing headers for Sentry's tracing system in a way OTel understands.
    Ncarrierr   contextOptional[Context]getterGetter[CarrierT]returnr   c                 C   s   |d u rt  }||t}|s|S t|d }|s|S tt||}|d |d }}tt|dt|dttj	dd}||t
}	|	rKt|	d }
nti d}
|
  tt|
|}t|}t||}|S )Nr   trace_idparent_span_id   T)r!   span_idtrace_flags	is_remote)sentry_items)r   getr   r	   r   r   r   intr   SAMPLEDr   r   from_incoming_headerfreezer   r   r
   set_span_in_context)selfr   r   r   sentry_tracesentrytracer!   r$   span_contextbaggage_headerbaggagespanmodified_context r6   m/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/integrations/opentelemetry/propagator.pyextract1   s2   
zSentryPropagator.extractsetterSetter[CarrierT]c                 C   s   |d u rt  }t|}| }|jsd S t|j}t j}|	|d }|s)d S |
|t|  |jrK|j }	|	rM|	 }
|
rO|
|t|
 d S d S d S d S N)r   r
   get_current_spanget_span_contextis_validformat_span_idr$   r   otel_span_mapr(   setr   to_traceparentcontaining_transactionget_baggage	serializer   )r.   r   r   r9   current_spancurrent_span_contextr$   span_mapsentry_spanr3   baggage_datar6   r6   r7   inject_   s*   

zSentryPropagator.injectSet[str]c                 C   s   t thS r;   )r   r   )r.   r6   r6   r7   fields~   s   zSentryPropagator.fields)r   r   r   r   r   r   r    r   )r   r   r   r   r9   r:   r    N)r    rL   )
__name__
__module____qualname____doc__r   r8   r   rK   propertyrM   r6   r6   r6   r7   r   ,   s4    
1
r   N)$sentry_sdk.integrationsr   ,sentry_sdk.integrations.opentelemetry.constsr   r   4sentry_sdk.integrations.opentelemetry.span_processorr   sentry_sdk.tracingr   r   sentry_sdk.tracing_utilsr   r	   opentelemetryr
   opentelemetry.contextr   r   r   !opentelemetry.propagators.textmapr   r   r   r   r   r   opentelemetry.tracer   r   r   ImportErrortypingr   r   r   r   r6   r6   r6   r7   <module>   s"     