o
    ^~#g                     @   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                	   @   sB   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   ~/var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/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   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   r   r   c              	      s   || _ | j/ | j | ||| jI d H  W d    n1 s!w   Y  W d    d S W d    d S 1 s9w   Y  d S r   )r   r0   r2   r   send_with_gzip)r   r   r   r   r   r   r   r"   $   s
   PzGZipResponder.__call__messagec                    sV  |d }|dkr|| _ t| j d d}d|v | _d S |dkr;| jr;| js1d| _| | j I d H  | |I d H  d S |dkr| jsd| _|dd	}|d
d}t|| jk rm|sm| | 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.startr    )rawzcontent-encodingzhttp.response.bodyTbody    	more_bodyFr   zContent-EncodingzContent-Lengthr   r   )r+   r   r-   r,   r   r   lenr   r2   writecloser0   getvaluer   stradd_vary_headerseektruncate)r   r4   message_typer    r6   r8   r   r   r   r3   )   sd   







zGZipResponder.send_with_gzip)r   )r#   r$   r%   r   r&   r   r   r   r   r"   r   r3   r   r   r   r   r      s    
r   r4   r   c                    s
   t d)Nzsend awaitable not set)RuntimeError)r4   r   r   r   r*   k   s   r*   )r   r.   typingstarlette.datastructuresr   r   starlette.typesr   r   r   r   r   r	   r   NoReturnr*   r   r   r   r   <module>   s    R