o
    c                     @   sv   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
mZ dd Zdd	 Ze ZG d
d deZdS )    N)msgpack)CaseInsensitiveDict   )HTTPResponsepickle	text_typec                 C   s   t | dS )Nascii)base64	b64decodeencode)b r   O/opt/certbot/lib/python3.10/site-packages/pip/_vendor/cachecontrol/serialize.py_b64_decode_bytes   s   r   c                 C   s   t | dS )Nutf8)r   decode)sr   r   r   _b64_decode_str   s   r   c                   @   sZ   e Zd ZdddZdddZdddZddd	Zdd
dZdddZdd Z	dddZ
dS )
SerializerNc           	   	   C   s   t |j}|d u r|jdd}t||_d|tdd |j D |j|j	t
|j|j|jdi}i |d< d|v ra|d d}|D ]}t
| }|j|d }|d urZt
|}||d |< qCd	d
tj|ddgS )NF)decode_contentresponsec                 s   $    | ]\}}t |t |fV  qd S N)r   .0kvr   r   r   	<genexpr>0   s    
z#Serializer.dumps.<locals>.<genexpr>)bodyheadersstatusversionreasonstrictr   vary,   ,s   cc=4T)use_bin_type)r   r   readioBytesIO_fpdictitemsr    r!   r   r"   r#   r   splitstripgetjoinr   dumps)	selfrequestr   r   response_headersdatavaried_headersheaderheader_valuer   r   r   r2      s4   

zSerializer.dumpsc                 C   s   |sd S z
| dd\}}W n ty   d}Y nw |d d dkr(|| }d}| ddd d}zt| d	||||W S  tyJ   Y d S w )
Nr&   r   s   cc=0   s   cc=   =r   z
_loads_v{})r.   
ValueErrorr   getattrformatAttributeError)r3   r4   r6   	body_fileverr   r   r   loadsH   s    zSerializer.loadsc           	      C   s   d| di v r
dS | di  D ]\}}|j |d|kr" dS q|d d}t|d d d}| dd	d
kr@|d ||d d< z|du rQt|}n|}W n tye   t|d}Y nw t	d|dd|d S )z`Verify our vary headers match and construct a real urllib3
        HTTPResponse object.
        *r$   Nr   r   r   )r6   ztransfer-encoding chunkedr   F)r   preload_contentr   )
r0   r-   r   popr   r)   r*   	TypeErrorr   r   )	r3   r4   cachedrA   r8   valuebody_rawr   r   r   r   r   prepare_responsef   s(   
	zSerializer.prepare_responsec                 C      d S r   r   r3   r4   r6   rA   r   r   r   	_loads_v0      zSerializer._loads_v0c                 C   s2   zt |}W n
 ty   Y d S w | |||S r   )r   rC   r=   rM   r3   r4   r6   rA   rJ   r   r   r   	_loads_v1   s   zSerializer._loads_v1c              	   C   s   |d u sJ zt t|d}W n ttjfy    Y d S w t|d d |d d< tdd |d d 	 D |d d< t
|d d |d d< tdd |d	 	 D |d	< | |||S )
Nr   r   r   c                 s   r   r   r   r   r   r   r   r      s
    
z'Serializer._loads_v2.<locals>.<genexpr>r   r"   c                 s   s0    | ]\}}t ||d urt |n|fV  qd S r   rT   r   r   r   r   r      s
    
r$   )jsonrC   zlib
decompressr   r=   errorr   r,   r-   r   rM   rR   r   r   r   	_loads_v2   s   
zSerializer._loads_v2c                 C   rN   r   r   rO   r   r   r   	_loads_v3   rQ   zSerializer._loads_v3c                 C   s6   z	t j|dd}W n
 ty   Y d S w | |||S )NF)raw)r   rC   r=   rM   rR   r   r   r   	_loads_v4   s   zSerializer._loads_v4r   )__name__
__module____qualname__r2   rC   rM   rP   rS   rY   rZ   r\   r   r   r   r   r      s    

,

)

r   )r	   r)   rU   rV   pip._vendorr   pip._vendor.requests.structuresr   compatr   r   r   r   r   object_default_body_readr   r   r   r   r   <module>   s   