
0c@_                 @   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 d d l m	 Z	 m
 Z
 m Z d d   Z d d	   Z Gd
 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-jynh7p1z/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               @   ss   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   sO  t  | j  } | d  k r? | j d d  } t j |  | _ d d | d t d d   | j j   D  d | j d	 | j	 d
 t
 | j  d | j d | j i i } i  | d <d | k r-| d j d  } x[ | D]S } t
 |  j   } | j j | d   } | d  k	 rt
 |  } | | d | <q Wd j d t j | d d g  S)Ndecode_contentFresponsebodyheadersc             s   s-   |  ]# \ } } t  |  t  |  f Vq d  S)N)r   ).0kvr   r   r   	<genexpr>3   s    z#Serializer.dumps.<locals>.<genexpr>statusversionreasonstrictvary,   ,s   cc=4Zuse_bin_typeT)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  Sy | j  d d  \ } } Wn t k
 r@ d } Yn X| d  d  d k rg | | } d } | 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{})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 SxE | j  d i   j   D]+ \ } } | j j  | d  | k r5 d Sq5 W| d j d  } t d | d d  } | j  d d	  d
 k r | j d  | | d 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   r2   r   ztransfer-encoding chunkedr   preload_contentF)
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   s<   y t  j |  } Wn t k
 r+ d  SYn 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   } Wn t t j f k
 rF 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!   )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   sB   y t  j | d d } Wn t k
 r1 d  SYn X|  j | |  S)NrawF)r   r>   r9   rH   )r/   r0   r2   rE   r   r   r   	_loads_v4   s
    	zSerializer._loads_v4)__name__
__module____qualname__r.   r>   rH   rI   rJ   rO   rP   rR   r   r   r   r   r      s   4&r   )r	   r%   rK   rL   Zpip._vendorr   Zpip._vendor.requests.structuresr   compatr   r   r   r   r   objectr   r   r   r   r   <module>   s   