3
ûâde³  ã               @   sp   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G d
d„ deƒZdS )é    N)Úmsgpack)ÚCaseInsensitiveDicté   )ÚHTTPResponseÚpickleÚ	text_typec             C   s   t j| jdƒƒS )NÚascii)Úbase64Ú	b64decodeÚencode)Úb© r   úA/tmp/pip-build-red6nood/pip/pip/_vendor/cachecontrol/serialize.pyÚ_b64_decode_bytes   s    r   c             C   s   t | ƒjdƒS )NÚutf8)r   Údecode)Úsr   r   r   Ú_b64_decode_str   s    r   c               @   sN   e Zd Zddd„Zdd„ Z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dd„ |jjƒ D ƒƒ|j|j	t
|jƒ|j|jdœi}i |d< d|krÆ|d jdƒ}xB|D ]:}t
|ƒjƒ }|jj|d ƒ}|d k	r¶t
|ƒ}||d |< qˆW d	jd
tj|dd�gƒS )NF)Údecode_contentÚresponsec             s   s"   | ]\}}t |ƒt |ƒfV  qd S )N)r   )Ú.0ÚkÚvr   r   r   ú	<genexpr>3   s    z#Serializer.dumps.<locals>.<genexpr>)ÚbodyÚheadersÚstatusÚversionÚreasonÚstrictr   Úvaryú,ó   ,s   cc=4T)Z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   r.      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{}éÿÿÿÿ)r*   Ú
ValueErrorr   ÚgetattrÚformatÚAttributeError)r/   r0   r2   Úverr   r   r   ÚloadsJ   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   )r2   ztransfer-encodingÚ Úchunkedr   F)r   Úpreload_content)
r,   r)   r   Úpopr   r%   r&   Ú	TypeErrorr   r   )r/   r0   Úcachedr4   ÚvalueÚbody_rawr   r   r   r   r   Úprepare_responseh   s    
zSerializer.prepare_responsec             C   s   d S )Nr   )r/   r0   r2   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   r>   r9   rH   )r/   r0   r2   rE   r   r   r   Ú	_loads_v1”   s
    zSerializer._loads_v1c             C   s¶   yt jtj|ƒjdƒƒ}W n ttjfk
r4   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!   )Újsonr>   ÚzlibÚ
decompressr   r9   Úerrorr   r(   r)   r   rH   )r/   r0   r2   rE   r   r   r   Ú	_loads_v2œ   s    zSerializer._loads_v2c             C   s   d S )Nr   )r/   r0   r2   r   r   r   Ú	_loads_v3°   s    zSerializer._loads_v3c             C   s4   yt j|dd�}W n tk
r&   d S X | j||ƒS )NF)Úraw)r   r>   r9   rH   )r/   r0   r2   rE   r   r   r   Ú	_loads_v4¶   s
    zSerializer._loads_v4)N)Ú__name__Ú
__module__Ú__qualname__r.   r>   rH   rI   rJ   rO   rP   rR   r   r   r   r   r      s   
4&r   )r	   r%   rK   rL   Úpip._vendorr   Zpip._vendor.requests.structuresr   Úcompatr   r   r   r   r   Úobjectr   r   r   r   r   Ú<module>   s   