
    Xj-                     t    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dz  de
j        e
j                 d	efd
Zde
j        fde
j        dedz  de
j        e
j                 d	dfdZed	e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 )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_contexts                i/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/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&&$$([")=)=>>"
 
 
 ("<00'
 
 	
    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 )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   r7   spanr3   traceparent_stringtracestate_strings           r4   injectz$TraceContextTextMapPropagator.injectM   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# 	 , 8 B B D DJJ57H    	 	r6   c                     | j         | j        hS )zReturns a set with the fields set in `inject`.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.fields`
        )r"   r'   )r.   s    r4   fieldsz$TraceContextTextMapPropagator.fieldsc   s     -t/KLLr6   )__name__
__module____qualname____doc__r"   r'   _TRACEPARENT_HEADER_FORMATr#   compiler%   r   default_getterCarrierTr   Getterr5   default_setterSetterrC   propertyr>   strrE    r6   r4   r
   r
      s.       @@,*	  %/BJ/I$J$J!
 #'3:3I	3
 3
!3
 43
 w/0	3

 
3
 3
 3
 3
p #'3:3I	 ! 4 w/0	
 
   , MC M M M XM M Mr6   r
   )r#   opentelemetryr   opentelemetry.context.contextr   opentelemetry.propagatorsr   opentelemetry.tracer   r   opentelemetry.trace.spanr   TextMapPropagatorr
   rS   r6   r4   <module>rZ      s    
			       1 1 1 1 1 1 - - - - - - ? ? ? ? ? ? ? ? / / / / / /]M ]M ]M ]M ]MG$= ]M ]M ]M ]M ]Mr6   