o
    h                     @   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rXd d
lmZ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_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)selfcarriercontextgettersentry_tracesentrytracer   r   span_contextbaggage_headerbaggagespanmodified_context r2   r/var/www/html/pro-man-master/venv/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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)   settercurrent_spancurrent_span_contextr   span_mapsentry_spanr/   baggage_datar2   r2   r3   injectW   s*   

zSentryPropagator.injectc                 C   s   t thS r5   )r   r   )r'   r2   r2   r3   fieldsr   s   zSentryPropagator.fields)
__name__
__module____qualname____doc__r
   r4   r   rF   propertyrG   r2   r2   r2   r3   r   (   s    *r   N)!opentelemetryr   opentelemetry.contextr   r   r   !opentelemetry.propagators.textmapr   r   r   r	   r
   r   opentelemetry.tracer   r   r   ,sentry_sdk.integrations.opentelemetry.constsr   r   4sentry_sdk.integrations.opentelemetry.span_processorr   sentry_sdk.tracingr   r   sentry_sdk.tracing_utilsr   r   typingr   r   r   r   r2   r2   r2   r3   <module>   s     