U
    ڲg                     @  sr   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	Z	d dl
mZ d dlmZ er`d dlmZ G dd dZdS )	    )annotationsN)IOTYPE_CHECKINGAnyMappingcast)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	rt|}||d |< qd	d
| j  | |gS )NF)decode_contentr   c                 S  s   i | ]\}}t |t |qS  )str).0kvr   r   :/tmp/pip-unpacked-wheel-rew7nuve/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])r2   r   c                 C  s   t ttj|ddS )NT)use_bin_type)r   r   msgpackr6   )r0   r2   r   r   r   r/   >   s    zSerializer.serializezIO[bytes] | NonezHTTPResponse | None)r   r2   	body_filer   c                 C  s>   |sd S | d| j d s$d S |dd  }| |||S )Nr!   r      )
startswithr-   r.   	_loads_v4)r0   r   r2   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rt|}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   )r2   ztransfer-encoding chunkedutf8strictF)r   preload_content)
r+   r(   r   popr   r#   r$   	TypeErrorr.   r	   )	r0   r   r>   r9   r4   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)r8   r=   
ValueErrorrI   )r0   r   r2   r9   r>   r   r   r   r<      s
    zSerializer._loads_v4)N)N)N)N)	__name__
__module____qualname__r-   r6   r/   r=   rI   r<   r   r   r   r   r      s    *  8 r   )
__future__r   r#   typingr   r   r   r   r   r8   Zrequests.structuresr   urllib3r	   requestsr
   r   r   r   r   r   <module>   s   