
    osj                     p   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ  ee      Zd
ee   dedee   fdZd
ee   dedededee   f
dZ G d dej:                        Zdeeef   dee   fdZ deejB                     dz  dejB                  dz  fdZ"y)    )IterableIteratorMapping)	getLogger)split)
quote_plusunquote_plus)_is_valid_pairget_allset_baggage)get_current)Context)textmap)_DELIMITER_PATTERNentriesmax_pair_lengthreturnc              #      K   | D ]  }|s|j                         s*t        j                  d|j                  dd      d          @t	        |      |kD  r4t        j                  d|j                  dd      d   t	        |             |  y w)Nz9Baggage entry with key `%s` contains non-ASCII characters=   r   z_Baggage entry with key `%s` exceeded the maximum number of bytes per list-member with length %d)isascii_loggerwarningr   len)r   r   entrys      ]/root/.hermes/venv/lib/python3.12/site-packages/opentelemetry/baggage/propagation/__init__.py_filter_valid_entriesr      s       }}OOKC#A& u:'OOqC#A&E

 !s   BB	max_pairsmax_header_lengthc              #      K   d}t        t        | |            D ]Y  \  }}||k\  rt        j                  d        y||dkD  rdndt	        |      z   z  }||kD  rt        j                  d        y| [ yw)zApply W3C Baggage size limits to a sequence of baggage entries.

    Yields entries that fit within the W3C specification limits.
    Logs warnings when entries are dropped.
    r   z3Baggage exceeded the maximum number of list-membersNr   z?Baggage exceeded the maximum number of bytes per baggage-string)	enumerater   r   r   r   )r   r   r   r   lengthindexr   s          r   _apply_baggage_limitsr$   )   s      F!g7 u IOOE 	1qCJ66%%OOQ s   A5A7c            	       0   e Zd ZdZdZdZdZd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y)W3CBaggagePropagatorzAExtracts and injects Baggage which is used to annotate telemetry.i    i      baggageNcarriercontextgetterr   c                    |
t               }t        |j                  || j                              }|s|S t	        |j                               | j                  kD  rt        j                  d|       |S t        t        |      }t        || j                  | j                  | j                        D ]{  }	 |j                  dd      \  }}t        ||      st        j                  d|       <t!        |      j#                         }t!        |      j#                         }t%        |||      }} |S # t        $ r t        j                  d|       Y w xY w)z}Extract Baggage from the carrier.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.extract`
        zKBaggage header `%s` exceeded the maximum number of bytes per baggage-stringr   r   r   r   r   z1Baggage list-member `%s` doesn't match the formatzInvalid baggage entry: `%s`r*   )r   _extract_first_elementget_BAGGAGE_HEADER_NAMEr   encode_MAX_HEADER_LENGTHr   r   r   r   r$   
_MAX_PAIRS_MAX_PAIR_LENGTH	Exceptionr
   r	   stripr   )	selfr)   r*   r+   headerbaggage_entriesr   namevalues	            r   extractzW3CBaggagePropagator.extractO   sE    ?!mG'JJw 9 9:
 Nv}}$"9"99OO] N 2F;*oo 11"55	
 	E#kk#q1e "$. =uE%++-D '--/E!G+	6 '  G 	s   5D11EEsetterc                     t        |      }|sydj                  t        t        |      | j                  | j
                  | j                              }|r|j                  || j                  |       yy)z|Injects Baggage into the carrier.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.inject`
        r.   N,r-   )	r   joinr$   _encode_baggage_pairsr4   r5   r3   setr1   )r8   r)   r*   r>   r:   baggage_strings         r   injectzW3CBaggagePropagator.inject   sk     "'2!%o6// $ 5 5"&"9"9	
 JJw 9 9>J     c                     | j                   hS )z.Returns a set with the fields set in `inject`.)r1   )r8   s    r   fieldszW3CBaggagePropagator.fields   s     ))**rF   )__name__
__module____qualname____doc__r3   r5   r4   r1   r   default_getterCarrierTr   Getterr=   default_setterSetterrE   propertyrC   strrH    rF   r   r&   r&   G   s    KJ$
 #'3:3I3I	:!!: 4: w//0	:
 
:~ #'3:3I3I	K!!K 4K w//0	K
 
K6 +C + +rF   r&   r:   c              #      K   | j                         D ]3  \  }}t        t        |            dz   t        t        |            z    5 yw)z9Yield URL-encoded 'key=value' pairs from baggage entries.r   N)itemsr   rS   )r:   keyr<   s      r   rB   rB      sH      &++- B
US"S(:c%j+AAABs   AA
rV   Nc                 2    | y t        t        |       d       S )N)nextiter)rV   s    r   r/   r/      s     }UT""rF   )#collections.abcr   r   r   loggingr   rer   urllib.parser   r	   opentelemetry.baggager
   r   r   opentelemetry.contextr   opentelemetry.context.contextr   opentelemetry.propagatorsr   opentelemetry.util.rer   rI   r   rS   intr   r$   TextMapPropagatorr&   objectrB   rN   r/   rT   rF   r   <module>rg      s    8 7   1 F F - 1 - 4
H
c] c].c]  	
 c]<b+744 b+JBS&[)Bc]B#G$$%,##rF   