File: //var/opt/nydus/ops/mysql/opentelemetry/trace/propagation/__pycache__/tracecontext.cpython-39.pyc
a
�,�hN � @ sf d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm Z m
Z
d dlmZ G dd� dej
�ZdS ) � N)�trace)�Context)�textmap)�format_span_id�format_trace_id)�
TraceStatec @ s� e Zd ZdZdZdZdZe�e�Z de
jfe
je
je e
je
j ed�dd�Zde
jfe
je
je e
je
j dd �d
d�Zee
je d�d
d��ZdS )�TraceContextTextMapPropagatorz6Extracts and injects using w3c TraceContext's headers.Ztraceparent�
tracestatezK^[ ]*([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?[ ]*$N)�carrier�context�getter�returnc
C s |du rt � }|�|| j�}|s$|S t�| j|d �}|s>|S |�d�}|�d�}|�d�}|�d�} |dksv|dkrz|S |d kr�|�d
�r�|S |dkr�|S |�|| j�}
|
du r�d}n
t� |
�}t
jt|d�t|d�d
t
�
t| d��|d�}t
�t
�|�|�S )z�Extracts SpanContext from the carrier.
See `mysql.opentelemetry.propagators.textmap.TextMapPropagator.extract`
Nr � � � � Z 00000000000000000000000000000000Z0000000000000000Z00� �ff� T)�trace_id�span_idZ is_remote�trace_flags�trace_state)r �get�_TRACEPARENT_HEADER_NAME�re�search�_TRACEPARENT_HEADER_FORMAT_RE�group�_TRACESTATE_HEADER_NAMEr Zfrom_headerr ZSpanContext�intZ
TraceFlagsZset_span_in_contextZNonRecordingSpan)
�selfr
r r �header�match�versionr r r Ztracestate_headersr �span_context� r&