o
    RhR                     @   sf   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ G dd dejZdS )	    N)trace)Context)textmap)format_span_idformat_trace_id)
TraceStatec                	   @   s   e Zd ZdZdZdZdZeeZ	de
jfde
jdeje de
je
j d	efd
dZde
jfde
jdeje de
je
j d	dfddZed	eje fddZdS )TraceContextTextMapPropagatorz6Extracts and injects using w3c TraceContext's headers.traceparent
tracestatezK^[ 	]*([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?[ 	]*$Ncarriercontextgetterreturnc              	   C   s   |du rt  }||| j}|s|S t| j|d }|s|S |d}|d}|d}|d}	|dks;|dkr=|S |d	krH|d
rH|S |dkrN|S ||| j}
|
du r\d}nt	|
}t
jt|dt|ddt
t|	d|d}t
t
||S )zzExtracts SpanContext from the carrier.

        See `opentelemetry.propagators.textmap.TextMapPropagator.extract`
        Nr                00000000000000000000000000000000000000000000000000   ff   T)trace_idspan_id	is_remotetrace_flagstrace_state)r   get_TRACEPARENT_HEADER_NAMEresearch_TRACEPARENT_HEADER_FORMAT_REgroup_TRACESTATE_HEADER_NAMEr   from_headerr   SpanContextint
TraceFlagsset_span_in_contextNonRecordingSpan)selfr   r   r   headermatchversionr   r   r   tracestate_headersr
   span_context r1   n/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/opentelemetry/trace/propagation/tracecontext.pyextract$   sB   







z%TraceContextTextMapPropagator.extractsetterc                 C   s~   t |}| }|t jkrdS dt|j dt|j d|jd}|	|| j
| |jr=|j }|	|| j| dS dS )zxInjects SpanContext into the carrier.

        See `opentelemetry.propagators.textmap.TextMapPropagator.inject`
        Nz00--02x)r   get_current_spanget_span_contextINVALID_SPAN_CONTEXTr   r   r   r   r   setr   r   	to_headerr$   )r+   r   r   r4   spanr0   traceparent_stringtracestate_stringr1   r1   r2   injectY   s   


&
z$TraceContextTextMapPropagator.injectc                 C   s   | j | jhS )zReturns a set with the fields set in `inject`.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.fields`
        )r   r$   )r+   r1   r1   r2   fieldso   s   z$TraceContextTextMapPropagator.fields)__name__
__module____qualname____doc__r   r$   _TRACEPARENT_HEADER_FORMATr    compiler"   r   default_getterCarrierTtypingOptionalr   Getterr3   default_setterSetterr?   propertySetstrr@   r1   r1   r1   r2   r      s>    


8

r   )r    rI   opentelemetryr   opentelemetry.context.contextr   opentelemetry.propagatorsr   opentelemetry.tracer   r   opentelemetry.trace.spanr   TextMapPropagatorr   r1   r1   r1   r2   <module>   s   