o
    Zh                     @   s   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 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 d d	lmZ er\d d
lmZ d dlm Z  G dd de
Z!dS )    )trace)Contextget_current	set_value)CarrierTGetterSetterTextMapPropagatordefault_getterdefault_setter)NonRecordingSpanSpanContext
TraceFlags)SENTRY_BAGGAGE_KEYSENTRY_TRACE_KEY)SentrySpanProcessor)BAGGAGE_HEADER_NAMESENTRY_TRACE_HEADER_NAME)Baggageextract_sentrytrace_data)TYPE_CHECKING)Optional)Setc                   @   s8   e Zd ZdZdefddZdefddZedd Z	dS )	SentryPropagatorz[
    Propagates tracing headers for Sentry's tracing system in a way OTel understands.
    Nc                 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_idZparent_span_id   T)r   span_idZtrace_flagsZ	is_remote)Zsentry_items)r   getr   r   r   r   r   intr   ZSAMPLEDr   r   Zfrom_incoming_headerfreezer   r   r   Zset_span_in_context)selfcarriercontextgetterZsentry_traceZsentrytracer   r   Zspan_contextZbaggage_headerbaggagespanZmodified_context r&   g/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/opentelemetry/propagator.pyextract-   s2   
zSentryPropagator.extractc           
      C   s   |d u rt  }t|}| }|jsd S t|j}t j}|	|d }|s)d S |
|t|  |jrG|j }	|	rI|
|t|	  d S d S d S N)r   r   Zget_current_spanZget_span_contextZis_validZformat_span_idr   r   Zotel_span_mapr   setr   Zto_traceparentZcontaining_transactionZget_baggager   	serialize)
r    r!   r"   setterZcurrent_spanZcurrent_span_contextr   Zspan_mapZsentry_spanr$   r&   r&   r'   injectW   s$   

zSentryPropagator.injectc                 C   s   t thS r)   )r   r   )r    r&   r&   r'   fieldsp   s   zSentryPropagator.fields)
__name__
__module____qualname____doc__r
   r(   r   r-   propertyr.   r&   r&   r&   r'   r   (   s    *r   N)"Zopentelemetryr   Zopentelemetry.contextr   r   r   Z!opentelemetry.propagators.textmapr   r   r   r	   r
   r   Zopentelemetry.tracer   r   r   Z,sentry_sdk.integrations.opentelemetry.constsr   r   Z4sentry_sdk.integrations.opentelemetry.span_processorr   Zsentry_sdk.tracingr   r   Zsentry_sdk.tracing_utilsr   r   Zsentry_sdk._typesr   typingr   r   r   r&   r&   r&   r'   <module>   s     