U
    ;»{j+  ã                   @  sv   d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ erdd dlmZ G dd	„ d	ƒZdS )
é    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚAnyÚMappingÚcast)Úmsgpack)ÚCaseInsensitiveDict)ÚHTTPResponse)ÚPreparedRequestc                   @  sx   e Zd ZdZddddddœdd	„Zd
ddœdd„Zddddddœdd„Zddddddœdd„Zddddddœdd„ZdS )Ú
SerializerÚ4Nr   r
   zbytes | NoneÚbytes)ÚrequestÚresponseÚbodyÚreturnc           	      C  sä   t |jƒ}|d kr4|jdd�}t |¡|_t|ƒ|_d|dd„ |j ¡ D ƒ|j	|j
t|jƒ|jdœi}i |d< d|krÄ|d  d¡}|D ]:}t|ƒ ¡ }|j |d ¡}|d k	r¶t|ƒ}||d |< qˆd	 d
| j› � ¡ |  |¡g¡S )NF)Údecode_contentr   c                 S  s   i | ]\}}t |ƒt |ƒ“qS © )Ústr)Ú.0ÚkÚvr   r   úC/tmp/pip-install-zsn1f9xv/pip/pip/_vendor/cachecontrol/serialize.pyÚ
<dictcomp>)   s      z$Serializer.dumps.<locals>.<dictcomp>)r   ÚheadersÚstatusÚversionÚreasonr   Úvaryú,ó   ,úcc=)r	   r   ÚreadÚioÚBytesIOÚ_fpÚlenÚlength_remainingÚitemsr   r   r   r   r   ÚsplitÚstripÚgetÚjoinÚserde_versionÚencodeÚ	serialize)	Úselfr   r   r   Úresponse_headersÚdataÚvaried_headersÚheaderÚheader_valuer   r   r   Údumps   s4    ÿ
úÿzSerializer.dumpszdict[str, Any])r3   r   c                 C  s   t ttj|dd�ƒS )NT)Úuse_bin_type)r   r   r   r7   )r1   r3   r   r   r   r0   >   s    zSerializer.serializezIO[bytes] | NonezHTTPResponse | None)r   r3   Ú	body_filer   c                 C  s>   |sd S |  d| j› d� ¡ ¡s$d S |dd … }|  |||¡S )Nr"   r    é   )Ú
startswithr.   r/   Ú	_loads_v4)r1   r   r3   r9   r   r   r   ÚloadsA   s    zSerializer.loadszMapping[str, Any])r   Úcachedr9   r   c           	      C  sö   d|  di ¡k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kr¢t |¡}n|}W n$ tk
rÌ   t | d¡¡}Y nX |d  dd¡ t	f |ddœ|d —ŽS )z`Verify our vary headers match and construct a real urllib3
        HTTPResponse object.
        Ú*r   Nr   r   r   )r3   ztransfer-encodingÚ ÚchunkedÚutf8ÚstrictF)r   Úpreload_content)
r,   r)   r   Úpopr	   r$   r%   Ú	TypeErrorr/   r
   )	r1   r   r>   r9   r5   ÚvalueÚbody_rawr   r   r   r   r   Úprepare_responseS   s(    
ÿ
zSerializer.prepare_responsec                 C  s8   zt j|dd�}W n tk
r(   Y d S X |  |||¡S )NF)Úraw)r   r=   Ú
ValueErrorrI   )r1   r   r3   r9   r>   r   r   r   r<   ‡   s
    zSerializer._loads_v4)N)N)N)N)	Ú__name__Ú
__module__Ú__qualname__r.   r7   r0   r=   rI   r<   r   r   r   r   r      s    ü* ü ü8 ür   )Ú
__future__r   r$   Útypingr   r   r   r   r   Úpip._vendorr   Zpip._vendor.requests.structuresr	   Zpip._vendor.urllib3r
   Zpip._vendor.requestsr   r   r   r   r   r   Ú<module>   s   