U
    &%e                     @   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   X/var/www/html/Darija-Ai-API/env/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type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)modefileobjr   )r   r   unattached_sendr   initial_messagestartedcontent_encoding_setioBytesIOgzip_bufferr   GzipFile	gzip_filer   r   r   r   r      s    
  zGZipResponder.__init__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__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   r3   writecloser1   getvaluer   strZadd_vary_headerseektruncate)r   r6   Zmessage_typer"   r8   r:   r   r   r   r4   .   s`    







zGZipResponder.send_with_gzip)r   )r$   r%   r&   r   r'   r   r   r   r   r#   r   r4   r   r   r   r   r!      s   r!   r5   c                    s   t dd S )Nzsend awaitable not set)RuntimeError)r6   r   r   r   r+   p   s    r+   )r   r/   typingZstarlette.datastructuresr   r   Zstarlette.typesr   r   r   r   r   r	   r!   NoReturnr+   r   r   r   r   <module>   s   S