
    Xj                        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j!                 dz  dej!        dz  fdZ"dS )    )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              #   d  K   | D ]}|s|                                 s6t                              d|                    dd          d                    Ot	          |          |k    rDt                              d|                    dd          d         t	          |                     |V  d S )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      g/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/opentelemetry/baggage/propagation/__init__.py_filter_valid_entriesr      s          	}} 	OOKC##A&   u::''OOqC##A&E

  
 !     	max_pairsmax_header_lengthc              #   "  K   d}t          t          | |                    D ]l\  }}||k    rt                              d            dS ||dk    rdndt	          |          z   z  }||k    rt                              d            dS |V  mdS )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7   u IOOE   FF		11qCJJ66%%%OOQ   FF r   c            	           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dS )W3CBaggagePropagatorzAExtracts and injects Baggage which is used to annotate telemetry.i    i      baggageNcarriercontextgetterr   c                    |t                      }t          |                    || j                            }|s|S t	          |                                          | j        k    rt                              d|           |S t          t          |          }t          || j        | j        | j                  D ]}	 |	                    dd          \  }}n+# t          $ r t                              d|           Y Dw xY wt          ||          st                              d|           tt!          |                                          }t!          |                                          }t%          |||          }|S )	z}Extract Baggage from the carrier.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.extract`
        NzKBaggage 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   s    ?!mmG'JJw 9::
 
  	Nv}}$"999OO]   N 2F;;*o 1"5	
 
 
 	 	E#kk#q11ee   G   	 "$..  =uEEE%%++--D ''--//E!  GG s   >C%D ?D setterc                     t          |          }|sdS d                    t          t          |          | j        | j        | j                            }|r|                    || j        |           dS dS )z|Injects Baggage into the carrier.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.inject`
        r/   N,r.   )	r   joinr%   _encode_baggage_pairsr5   r6   r4   setr2   )r9   r*   r+   r?   r;   baggage_strings         r   injectzW3CBaggagePropagator.inject   s     "'222 	F!%o66/ $ 5"&"9	  
 
  	KJJw 9>JJJJJ	K 	Kr   c                     | j         hS )z.Returns a set with the fields set in `inject`.)r2   )r9   s    r   fieldszW3CBaggagePropagator.fields   s     )**r   )__name__
__module____qualname____doc__r4   r6   r5   r2   r   default_getterCarrierTr   Getterr>   default_setterSetterrF   propertyrD   strrH    r   r   r'   r'   G   s       KKJ$
 #'3:3I	: :!: 4: w/0	:
 
: : : :~ #'3:3I	K K!K 4K w/0	K
 
K K K K6 +C + + + X+ + +r   r'   r;   c              #      K   |                                  D ]C\  }}t          t          |                    dz   t          t          |                    z   V  DdS )z9Yield URL-encoded 'key=value' pairs from baggage entries.r   N)itemsr   rS   )r;   keyr=   s      r   rC   rC      sj       &++-- B B
US""S(:c%jj+A+AAAAAAB Br   rV   Nc                 D    | d S t          t          |           d           S )N)nextiter)rV   s    r   r0   r0      s$     }tUT"""r   )#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'   objectrC   rN   r0   rT   r   r   <module>rg      s   8 7 7 7 7 7 7 7 7 7             1 1 1 1 1 1 1 1 F F F F F F F F F F - - - - - - 1 1 1 1 1 1 - - - - - - 4 4 4 4 4 4
)H

c] c]   .c]  	
 c]   <b+ b+ b+ b+ b+74 b+ b+ b+JBS&[)Bc]B B B B#G$%,## # # # # #r   