
^V                 @   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 Gd 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   A/tmp/pip-build-9m6vxulb/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 |   St |   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 rB | j d d  } t j |  | _ n  i i t |  d 6t d d   | j j   D  d 6| j	 d 6| j
 d 6t | j  d	 6| j d
 6| j d 6d 6} i  | d <d | k r| d j d  } x: | D]/ } | j   } | j j | d   | d | <q Wn  t d d   | d j   D  | d <d j d t j t j | d d d d j d   g  S)Ndecode_contentFbodyc             s   s-   |  ]# \ } } t  |  t  |  f Vq d  S)N)r   ).0kvr   r   r   	<genexpr>9   s   z#Serializer.dumps.<locals>.<genexpr>headersstatusversionreasonstrictresponsevary,c             s   s?   |  ]5 \ } } t  |  | d  k	 r0 t  |  n | f Vq d  S)N)r   )r   r   r   r   r   r   r   N   s      ,s   cc=2
separators:	sort_keysTr   )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  Sy | j  d d  \ } } Wn t k
 r@ d } Yn X| d  d  d k rj | | } d } n  | j  d d  d	 j d  } y# t |  d j |   | |  SWn t k
 r d  SYn Xd  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 SxE | j  d i   j   D]+ \ } } | j j  | d  | k r5 d Sq5 W| d j d  } y t j |  } Wn* t k
 r t j | j d   } Yn Xt d | d d | d  S)	z`Verify our vary headers match and construct a real urllib3
        HTTPResponse object.
        *r%   Nr$   r   r   preload_contentF)	r3   r0   r   popr,   r-   	TypeErrorr   r   )r9   r:   cachedr>   valuebody_rawr   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   s<   y t  j |  } Wn t k
 r+ d  SYn X|  j | |  S)N)r   rG   rB   rO   )r9   r:   r<   rL   r   r   r   	_loads_v1   s
    	zSerializer._loads_v1c             C   s   y% t  j t j |  j d   } Wn t k
 r= d  SYn Xt | 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?   |  ]5 \ } } t  |  | d  k	 r0 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   rO   )r9   r:   r<   rL   r   r   r   	_loads_v2   s    %		#	zSerializer._loads_v2)	__name__
__module____qualname__r8   rG   rO   rP   rQ   rS   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   