o
    gO                     @   s   d dl mZ d dlmZ d dlmZmZmZmZ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G d
d dejZdeeef defddZdeeej   deej  fddZ!dS )    )	getLogger)split)IterableListMappingOptionalSet)
quote_plusunquote_plus)_is_valid_pairget_allset_baggage)get_current)Context)textmap)_DELIMITER_PATTERNc                	   @   s   e Zd ZdZdZdZdZdZdej	fdej
dee d	ejej
 d
efddZdejfdej
dee dejej
 d
dfddZed
ee fddZdS )W3CBaggagePropagatorzAExtracts and injects Baggage which is used to annotate telemetry.i    i      baggageNcarriercontextgetterreturnc           
   	   C   s(  |du rt  }t||| j}|s|S t|| jkr#td| |S tt	|}| j
}t|| j
kr8td| |D ]W}t|| jkrJtd| q:|sMq:z
|dd\}}	W n tyf   td| Y q:w t||	sstd| q:t| }t|	 }	t||	|d	}|d8 }|d
kr |S q:|S )z}Extract Baggage from the carrier.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.extract`
        NzKBaggage header `%s` exceeded the maximum number of bytes per baggage-stringz?Baggage header `%s` exceeded the maximum number of list-memberszGBaggage entry `%s` exceeded the maximum number of bytes per list-member=   z1Baggage list-member `%s` doesn't match the formatzInvalid baggage entry: `%s`r   r   )r   _extract_first_elementget_BAGGAGE_HEADER_NAMElen_MAX_HEADER_LENGTH_loggerwarningr   r   
_MAX_PAIRS_MAX_PAIR_LENGTH	Exceptionr   r
   stripr   )
selfr   r   r   headerbaggage_entriestotal_baggage_entriesentrynamevalue r.   a/var/www/visachat/venv/lib/python3.10/site-packages/opentelemetry/baggage/propagation/__init__.pyextract%   sj   

zW3CBaggagePropagator.extractsetterc                 C   s.   t |d}|s	dS t|}||| j| dS )z|Injects Baggage into the carrier.

        See
        `opentelemetry.propagators.textmap.TextMapPropagator.inject`
        r   N)r   _format_baggagesetr   )r'   r   r   r1   r)   baggage_stringr.   r.   r/   injectn   s
   
zW3CBaggagePropagator.injectc                 C   s   | j hS )z.Returns a set with the fields set in `inject`.)r   )r'   r.   r.   r/   fields   s   zW3CBaggagePropagator.fields)__name__
__module____qualname____doc__r    r$   r#   r   r   default_getterCarrierTr   r   Getterr0   default_setterSetterr5   propertyr   strr6   r.   r.   r.   r/   r      s<    

L

r   r)   r   c                 C   s   d dd |  D S )N,c                 s   s0    | ]\}}t t|d  t t| V  qdS )r   N)r	   rA   ).0keyr-   r.   r.   r/   	<genexpr>   s
    
z"_format_baggage.<locals>.<genexpr>)joinitems)r)   r.   r.   r/   r2      s   
r2   rG   c                 C   s   | d u rd S t t| d S )N)nextiter)rG   r.   r.   r/   r      s   r   N)"loggingr   rer   typingr   r   r   r   r   urllib.parser	   r
   opentelemetry.baggager   r   r   opentelemetry.contextr   opentelemetry.context.contextr   opentelemetry.propagatorsr   opentelemetry.util.rer   r7   r!   TextMapPropagatorr   rA   objectr2   r<   r   r.   r.   r.   r/   <module>   s"   i