o
    [h
                     @   sn   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	dfd
dZdS )    N)HeadersMutableHeaders)ASGIAppMessageReceiveScopeSendc                   @   s>   e Zd Zd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returnNc                 C   s   || _ || _d S N)r   r   selfr   r    r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/starlette/middleware/gzip.py__init__	   s   
zGZipMiddleware.__init__scopereceivesendc                    sd   |d dkr&t |d}d|ddv r&t| j| j}||||I d H  d S | |||I d H  d S )Ntypehttp)r   gzipAccept-Encoding )r   getGZipResponderr   r   )r   r   r   r   headersZ	responderr   r   r   __call__   s   
zGZipMiddleware.__call__)r
   )
__name__
__module____qualname__r   intr   r   r   r   r   r   r   r   r   r	      s    r	   c                   @   sN   e Zd Z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   Nc                 C   s>   || _ || _t| _i | _d| _t | _t	j
d| jd| _d S )NFwb)modefileobj)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   r.   writecloser,   getvaluer   strZadd_vary_headerseektruncate)r   r0   Zmessage_typer1   r3   r   r   r   r   r/   %   sV   







zGZipResponder.send_with_gzip)r    r!   r"   r   r#   r   r   r   r   r   r   r/   r   r   r   r   r      s    	r   r0   r   c                    s
   t d)Nzsend awaitable not set)RuntimeError)r0   r   r   r   r'   `   s   r'   )r   r*   Zstarlette.datastructuresr   r   Zstarlette.typesr   r   r   r   r   r	   r   r'   r   r   r   r   <module>   s    I