U
    Rh                     @   sv   d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZ G dd dZG dd dZeejdd	d
ZdS )    N)HeadersMutableHeaders)ASGIAppMessageReceiveScopeSendc                   @   s6   e Zd Zd
eeeddddZeeedddd	Z	dS )GZipMiddleware  	   Nappminimum_sizecompresslevelreturnc                 C   s   || _ || _|| _d S N)r   r   r   selfr   r   r    r   ?./venv/lib/python3.8/site-packages/starlette/middleware/gzip.py__init__
   s    zGZipMiddleware.__init__scopereceivesendr   c                    sh   |d dkrPt |d}d|ddkrPt| j| j| jd}||||I d H  d S | |||I d H  d S )NtypeZhttp)r   gzipAccept-Encoding )r   )r   getGZipResponderr   r   r   )r   r   r   r   headersZ	responderr   r   r   __call__   s    
zGZipMiddleware.__call__)r
   r   )
__name__
__module____qualname__r   intr   r   r   r   r"   r   r   r   r   r	   	   s   r	   c                   @   sF   e Zd ZdeeeddddZeeeddddZ	e
dd	d
dZdS )r    r   Nr   c                 C   sF   || _ || _t| _i | _d| _d| _t | _	t
jd| j	|d| _d S )NFwb)modeZfileobjr   )r   r   unattached_sendr   initial_messagestartedcontent_encoding_setioBytesIOgzip_bufferr   ZGzipFile	gzip_filer   r   r   r   r      s    
zGZipResponder.__init__r   c              
      sD   || _ | j. | j | ||| jI d H  W 5 Q R X W 5 Q R X d S r   )r   r/   r0   r   send_with_gzip)r   r   r   r   r   r   r   r"   $   s    zGZipResponder.__call__messager   c                    sP  |d }|dkr4|| _ t| j d d}d|k| _n|dkrt| jrt| js`d| _| | j I d H  | |I d H  n|dkr| jsd| _|dd	}|d
d}t|| jk r|s| | j I d H  | |I d H  n|s^| j	| | j
  | j }t| j d d}d|d< tt||d< |d ||d< | | j I d H  | |I d H  nzt| j d d}d|d< |d |d= | j	| | j |d< | jd | j  | | j I d H  | |I d H  nr|dkrL|dd	}|d
d}| j	| |s| j
  | j |d< | jd | j  | |I d H  d S )Nr   zhttp.response.startr!   )rawzcontent-encodingzhttp.response.bodyTbody    	more_bodyFr   zContent-EncodingzContent-Lengthr   r   )r*   r   r,   r+   r   r   lenr   r0   writecloser/   getvaluer   strZadd_vary_headerseektruncate)r   r3   Zmessage_typer!   r5   r7   r   r   r   r1   )   s`    







zGZipResponder.send_with_gzip)r   )r#   r$   r%   r   r&   r   r   r   r   r"   r   r1   r   r   r   r   r       s   
r    r2   c                    s   t dd S )Nzsend awaitable not set)RuntimeError)r3   r   r   r   r)   k   s    r)   )r   r-   typingZstarlette.datastructuresr   r   Zstarlette.typesr   r   r   r   r   r	   r    ZNoReturnr)   r   r   r   r   <module>   s   R