
    gR                     ~    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y)	    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y)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                  || j                        }|s|S t        j                  | j
                  |d         }|s|S |j                  d      }|j                  d      }|j                  d      }|j                  d      }	|dk(  s|dk(  r|S |d	k(  r|j                  d
      r|S |dk(  r|S |j                  || 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                a/var/www/openai/venv/lib/python3.12/site-packages/opentelemetry/trace/propagation/tracecontext.pyextractz%TraceContextTextMapPropagator.extract$   sR    ?iGGT%B%BCN		$<<fQiHN{{1~A{{1~ ;;q>x7h#6Nd?{{1~d?N#ZZ1M1MN%J#//0BCJ((2&$(([")=>"
 ((""<0'
 	
    setterc                    t        j                  |      }|j                         }|t         j                  k(  rydt	        |j
                         dt        |j                         d|j                  d}|j                  || j                  |       |j                  r8|j                  j                         }|j                  || j                  |       yy)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.injectY   s     %%g.,,.5555"?<3H3H#I"J!N[g[o[oLpKqqrs  tL  tL  MP  sQ  R

7D99;MN## , 8 8 B B DJJ557H $r6   c                 2    | 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.fieldso   s     --t/K/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
      s   @,*	  %/BJJ/I$J!
 -13:3I3I	3
!!3
 )3
 w//0	3

 
3
p -13:3I3I	!! ) w//0	
 
, M

3 M Mr6   r
   )r#   rN   opentelemetryr   opentelemetry.context.contextr   opentelemetry.propagatorsr   opentelemetry.tracer   r   opentelemetry.trace.spanr   TextMapPropagatorr
   rV   r6   r4   <module>r]      s2    
   1 - ? /]MG$=$= ]Mr6   