B
    uf                 @  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}xB|D ]:}t| }|j|d }|d k	rt|}||d |< qW d	d
| j  | |gS )NF)decode_contentr   c             S  s   i | ]\}}t |t |qS  )str).0kvr   r   X/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-packages/cachecontrol/serialize.py
<dictcomp>)   s    z$Serializer.dumps.<locals>.<dictcomp>)r   headersstatusversionreasonr   vary,   ,z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   s.    

zSerializer.dumpszdict[str, Any])r1   r   c             C  s   t ttj|ddS )NT)use_bin_type)r   r   msgpackr5   )r/   r1   r   r   r   r.   >   s    zSerializer.serializezIO[bytes] | NonezHTTPResponse | None)r   r1   	body_filer   c             C  s>   |sd S | d| j d s$d S |dd  }| |||S )Nzcc=r      )
startswithr,   r-   	_loads_v4)r/   r   r1   r8   r   r   r   loadsA   s    zSerializer.loadszMapping[str, Any])r   cachedr8   r   c       	      C  s   d| di krdS x2| di  D ]\}}|j |d|kr&dS q&W |d d}t|d d d}| dd	d
kr|d ||d d< y|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   )r1   ztransfer-encoding chunkedutf8strictF)r   preload_content)
r*   r'   r   popr   r"   r#   	TypeErrorr-   r	   )	r/   r   r=   r8   r3   valuebody_rawr   r   r   r   r   prepare_responseS   s&    
zSerializer.prepare_responsec             C  s6   yt j|dd}W n tk
r&   d S X | |||S )NF)raw)r7   r<   
ValueErrorrH   )r/   r   r1   r8   r=   r   r   r   r;      s
    zSerializer._loads_v4)N)N)N)N)	__name__
__module____qualname__r,   r5   r.   r<   rH   r;   r   r   r   r   r      s   &4r   )
__future__r   r"   typingr   r   r   r   r   r7   Zrequests.structuresr   urllib3r	   requestsr
   r   r   r   r   r   <module>   s   