U
    4JeY                     @   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eeef edddZeeej   eej  d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ej
ee ejej
 eddd	Zdejfej
ee ejej
 dd
ddZeee dddZdS )W3CBaggagePropagatorzAExtracts and injects Baggage which is used to annotate telemetry.i    i      ZbaggageN)carriercontextgetterreturnc           
   	   C   s.  |dkrt  }t||| j}|s(|S t|| jkrFtd| |S tt	|}| j
}t|| j
krptd| |D ]}t|| jkrtd| qt|sqtz|dd\}}	W n$ tk
r   td| Y qtY nX t||	std| qtt| }t|	 }	t||	|d	}|d8 }|d
krt q*qt|S )zExtract Baggage from the carrier.

        See
        `mysql.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_entriesZtotal_baggage_entriesentrynamevalue r,   T/tmp/pip-unpacked-wheel-7_167w8m/mysql/opentelemetry/baggage/propagation/__init__.pyextract%   sb    
 

zW3CBaggagePropagator.extract)r   r   setterr   c                 C   s.   t |d}|sdS t|}||| j| dS )zInjects Baggage into the carrier.

        See
        `mysql.opentelemetry.propagators.textmap.TextMapPropagator.inject`
        r   N)r   _format_baggagesetr   )r&   r   r   r/   r(   Zbaggage_stringr,   r,   r-   injectl   s
    
zW3CBaggagePropagator.inject)r   c                 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   Zdefault_getterCarrierTr   r   ZGetterr.   Zdefault_setterZSetterr2   propertyr   strr3   r,   r,   r,   r-   r      s.   
J
r   )r(   r   c                 C   s   d dd |  D S )N,c                 s   s.   | ]&\}}t t|d  t t| V  qdS )r   N)r	   r:   ).0keyr+   r,   r,   r-   	<genexpr>   s   z"_format_baggage.<locals>.<genexpr>)joinitems)r(   r,   r,   r-   r0      s    
r0   )r@   r   c                 C   s   | d krd S t t| d S )N)nextiter)r@   r,   r,   r-   r      s    r   N)"loggingr   rer   typingr   r   r   r   r   urllib.parser	   r
   Zmysql.opentelemetry.baggager   r   r   Zmysql.opentelemetry.contextr   Z#mysql.opentelemetry.context.contextr   Zmysql.opentelemetry.propagatorsr   Zmysql.opentelemetry.util.rer   r4   r    ZTextMapPropagatorr   r:   objectr0   r8   r   r,   r,   r,   r-   <module>   s   g