
    iN                     |    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ej                  ZdS )	    N)trace)Context)textmap)format_span_idformat_trace_id)
TraceStatec            	       @   e Zd ZdZdZdZdZ ej        e          Z	de
j        fde
j        dej        e         de
j        e
j                 d	efd
Zde
j        fde
j        dej        e         de
j        e
j                 d	dfdZed	ej        e         f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                    |t                      }|                    || j                  }|s|S t          j        | j        |d                   }|s|S |                    d          }|                    d          }|                    d          }|                    d          }	|dk    s|dk    r|S |d	k    r|                    d
          r|S |dk    r|S |                    || j                  }
|
d}nt          j	        |
          }t          j        t          |d          t          |d          dt          j        t          |	d                    |          }t          j        t          j        |          |          S )zExtracts SpanContext from the carrier.

        See `mysql.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_contexts                l/var/www/cyber-strat/venv/lib/python3.11/site-packages/mysql/opentelemetry/trace/propagation/tracecontext.pyextractz%TraceContextTextMapPropagator.extract$   s    ?iiGGT%BCC 	N	$<fQiHH 	N{{1~~A{{1~~ ;;q>>x7h#6#6Nd??{{1~~ d??N#ZZ1MNN%JJ#/0BCCJ(2&&$$([")=)=>>"
 
 
 ()?)M)MwWWW    setterc                    t          j        |          }|                                }|t           j        k    rdS dt	          |j                   dt          |j                   d|j        d}|	                    || j
        |           |j        r7|j                                        }|	                    || j        |           dS dS )z~Injects SpanContext into the carrier.

        See `mysql.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   r7   spanr3   traceparent_stringtracestate_strings           r4   injectz$TraceContextTextMapPropagator.injectW   s     %g..,,..5555F R?<3H#I#I  R  RN[g[oLpLp  R  Rs  tL  R  R  R

7D9;MNNN# 	Q , 8 B B D DJJw <>OPPPPP	Q 	Qr6   c                     | j         | j        hS )zReturns a set with the fields set in `inject`.

        See
        `mysql.opentelemetry.propagators.textmap.TextMapPropagator.fields`
        )r"   r'   )r.   s    r4   fieldsz$TraceContextTextMapPropagator.fieldsk   s     -t/KLLr6   )__name__
__module____qualname____doc__r"   r'   _TRACEPARENT_HEADER_FORMATr#   compiler%   r   default_getterCarrierTtypingOptionalr   Getterr5   default_setterSetterrC   propertySetstrrE    r6   r4   r
   r
      sH       @@,*	  %/BJ/I$J$J!
 -13:3I	1X 1X!1X )1X w/0	1X
 
1X 1X 1X 1Xl -13:3I	Q Q!Q )Q w/0	Q
 
Q Q Q Q( M
3 M M M XM M Mr6   r
   )r#   rN   mysql.opentelemetryr   #mysql.opentelemetry.context.contextr   mysql.opentelemetry.propagatorsr   mysql.opentelemetry.tracer   r   mysql.opentelemetry.trace.spanr   TextMapPropagatorr
   rV   r6   r4   <module>r]      s    
			  % % % % % % 7 7 7 7 7 7 3 3 3 3 3 3 E E E E E E E E 5 5 5 5 5 5YM YM YM YM YMG$= YM YM YM YM YMr6   