o
    :ήc                     @   sx   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ded	ejfd
dZdS )    N)HeadersMutableHeaders)ASGIAppMessageReceiveScopeSendc                	   @   sD   e Zd Z	ddedededdfdd	Zd
edededdfddZ	dS )GZipMiddleware  	   appminimum_sizecompresslevelreturnNc                 C   s   || _ || _|| _d S N)r   r   r   selfr   r   r    r   @/tmp/pip-target-vg8gfxp4/lib/python/starlette/middleware/gzip.py__init__
   s   
zGZipMiddleware.__init__scopereceivesendc                    sj   |d dkr)t |d}d|ddv r)t| j| j| jd}||||I d H  d S | |||I d H  d S )Ntypehttp)r   gzipAccept-Encoding )r   )r   getGZipResponderr   r   r   )r   r   r   r   headers	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                	   @   sT   e Zd ZddedededdfddZd	ed
ededdfddZ	de
ddfddZdS )r   r   r   r   r   r   Nc                 C   s@   || _ || _t| _i | _d| _t | _t	j
d| j|d| _d S )NFwb)modefileobjr   )r   r   unattached_sendr   initial_messagestartedioBytesIOgzip_bufferr   GzipFile	gzip_filer   r   r   r   r      s   
zGZipResponder.__init__r   r   r   c                    s"   || _ | ||| jI d H  d S r   )r   r   send_with_gzip)r   r   r   r   r   r   r   r"   )   s   zGZipResponder.__call__messagec                    s  |d }|dkr|| _ d S |dkr| jsd| _|dd}|dd}t|| jk r@|s@| | j I d H  | |I d H  d S |s| j| | j  | j	
 }t| j d	 d
}d|d< tt||d< |d ||d< | | j I d H  | |I d H  d S t| j d	 d
}d|d< |d |d= | j| | j	
 |d< | j	d | j	  | | j I d H  | |I d H  d S |dkr|dd}|dd}| j| |s| j  | j	
 |d< | j	d | j	  | |I d H  d S d S )Nr   zhttp.response.startzhttp.response.bodyTbody    	more_bodyFr    )rawr   zContent-EncodingzContent-Lengthr   r   )r+   r,   r   lenr   r   r1   writecloser/   getvaluer   stradd_vary_headerseektruncate)r   r3   message_typer4   r6   r    r   r   r   r2   -   sV   







zGZipResponder.send_with_gzip)r   )r#   r$   r%   r   r&   r   r   r   r   r"   r   r2   r   r   r   r   r      s    r   r3   r   c                    s
   t d)Nzsend awaitable not set)RuntimeError)r3   r   r   r   r*   h   s   r*   )r   r-   typingstarlette.datastructuresr   r   starlette.typesr   r   r   r   r   r	   r   NoReturnr*   r   r   r   r   <module>   s    K