3
LY                 @   s|   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mZm	Z	 dd Z
dd Zd	d
 Zdd Zdd ZG dd deZdS )    N)CaseInsensitiveDict   )HTTPResponsepickle	text_typec             C   s   t j| jdS )Nascii)base64	b64encodedecode)b r   u/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/pip/pip/_vendor/cachecontrol/serialize.py_b64_encode_bytes   s    r   c             C   s   t | jdS )Nutf8)r   encode)sr   r   r   _b64_encode_str   s    r   c             C   s   t | trt| S t| S )N)
isinstancer   r   r   )r   r   r   r   _b64_encode   s    
r   c             C   s   t j| jdS )Nr   )r   	b64decoder   )r   r   r   r   _b64_decode_bytes   s    r   c             C   s   t | jdS )Nr   )r   r
   )r   r   r   r   _b64_decode_str   s    r   c               @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )
SerializerNc          	   C   s   t |j}|d kr*|jdd}tj||_dt|tdd |jj D |j	|j
t|j|j|jdi}i |d< d|kr|d jd}x*|D ]"}|j }|jj|d |d |< qW td	d |d j D |d< d
jdtjtj|dddjdgS )NF)decode_contentresponsec             s   s"   | ]\}}t |t |fV  qd S )N)r   ).0kvr   r   r   	<genexpr>9   s   z#Serializer.dumps.<locals>.<genexpr>)bodyheadersstatusversionreasonstrictr   vary,c             s   s.   | ]&\}}t ||d k	r t |n|fV  qd S )N)r   )r   r   r   r   r   r   r   N   s      ,s   cc=2:T)
separators	sort_keysr   )r&   r(   )r   r    readioBytesIO_fpr   dictitemsr!   r"   r   r#   r$   r   splitstripgetjoinzlibcompressjsondumpsr   )selfrequestr   r   response_headersdatavaried_headersheaderr   r   r   r8   #   s:    

zSerializer.dumpsc             C   s   |sd S y|j dd\}}W n tk
r4   d}Y nX |d d dkrR|| }d}|j ddd	 jd}yt| dj|||S  tk
r   d S X d S )
Nr'   r   s   cc=0   s   cc=   =r   z_loads_v{0})r1   
ValueErrorr
   getattrformatAttributeError)r9   r:   r<   verr   r   r   loads[   s    
zSerializer.loadsc             C   s   d|j di krdS x2|j di j D ]\}}|jj |d|kr&dS q&W |d jd}t|d d d}|j dd	d
kr|jd ||d d< ytj|}W n$ tk
r   tj|jd}Y nX t	f |dd|d S )z`Verify our vary headers match and construct a real urllib3
        HTTPResponse object.
        *r%   Nr   r   r    )r<   ztransfer-encoding chunkedr   F)r   preload_content)
r3   r0   r    popr   r,   r-   	TypeErrorr   r   )r9   r:   cachedr>   valuebody_rawr    r   r   r   r   prepare_responsex   s$    
zSerializer.prepare_responsec             C   s   d S )Nr   )r9   r:   r<   r   r   r   	_loads_v0   s    zSerializer._loads_v0c             C   s0   yt j|}W n tk
r"   d S X | j||S )N)r   rG   rB   rQ   )r9   r:   r<   rN   r   r   r   	_loads_v1   s
    zSerializer._loads_v1c             C   s   yt jtj|jd}W n tk
r.   d S X t|d d |d d< tdd |d d j D |d d< t	|d d |d d< tdd |d	 j D |d	< | j
||S )
Nr   r   r   c             s   s"   | ]\}}t |t |fV  qd S )N)r   )r   r   r   r   r   r   r      s   z'Serializer._loads_v2.<locals>.<genexpr>r    r#   c             s   s.   | ]&\}}t ||d k	r t |n|fV  qd S )N)r   )r   r   r   r   r   r   r      s   r%   )r7   rG   r5   
decompressr
   rB   r   r/   r0   r   rQ   )r9   r:   r<   rN   r   r   r   	_loads_v2   s    zSerializer._loads_v2)N)	__name__
__module____qualname__r8   rG   rQ   rR   rS   rU   r   r   r   r   r   !   s   
8(r   )r   r,   r7   r5   Zpip._vendor.requests.structuresr   compatr   r   r   r   r   r   r   r   objectr   r   r   r   r   <module>   s   