o
    je"                     @  s   U d dl mZ d dlZd dlm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 dZejdZded< dddZG dd dZG dd dZG dd deZdddZdddZdS )    )annotationsN)NoReturn)HeadersMutableHeaders)ASGIAppMessageReceiveScopeSend)zapplication/gzipzapplication/x-gzipzapplication/zipzaudio/*z	font/woffz
font/woff2z
image/avifz	image/gifz
image/jpegz	image/pngz
image/webpztext/event-streamzvideo/*_gzip_capacity_limiterz,anyio.lowlevel.RunVar[anyio.CapacityLimiter]returnanyio.CapacityLimiterc                  C  s6   zt  W S  ty   td} t |  |  Y S w )zDReturn the capacity limiter used for worker-thread GZip compression.(   )r   getLookupErroranyioCapacityLimitersetlimiter r   W/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/starlette/middleware/gzip.py_get_gzip_capacity_limiter    s   


r   c                   @  s.   e Zd Z			deddddZdddZdS )GZipMiddleware  	      exclude_content_typesappr   minimum_sizeintcompresslevelthread_minimum_sizer   tuple[str, ...]r   Nonec                C  s&   || _ || _|| _|| _t|| _d S N)r   r    r"   r#   _normalize_content_typesr   selfr   r    r"   r#   r   r   r   r   __init__-   s
   	zGZipMiddleware.__init__scoper	   receiver   sendr
   c                   s   |d dkr|  |||I d H  d S t|d}d|ddv r/t| j | j| j| j| jd}n
t| j | j| jd}||||I d H  d S )	Ntypehttp)r+   gzipAccept-Encoding )r"   r#   r   r   )	r   r   r   GZipResponderr    r"   r#   r   IdentityResponder)r)   r+   r,   r-   headers	responderr   r   r   __call__<   s   
zGZipMiddleware.__call__N)r   r   r   r   r   r    r!   r"   r!   r#   r!   r   r$   r   r%   r+   r	   r,   r   r-   r
   r   r%   )__name__
__module____qualname__DEFAULT_EXCLUDED_CONTENT_TYPESr*   r7   r   r   r   r   r   ,   s    r   c                   @  sD   e Zd ZU ded< edd!ddZd"ddZd#ddZd$ddZd S )%r4   strcontent_encodingr   r   r   r    r!   r   r$   r   r%   c                C  s>   || _ || _t|| _t| _i | _d| _d| _d| _	d| _
d S )NF)r   r    r'   r   unattached_sendr-   initial_messagestartedcontent_encoding_setcontent_type_is_excludedpartial_response)r)   r   r    r   r   r   r   r*   T   s   

zIdentityResponder.__init__r+   r	   r,   r   r-   r
   c                   s"   || _ | ||| jI d H  d S r&   )r-   r   send_with_compression)r)   r+   r,   r-   r   r   r   r7   e   s   zIdentityResponder.__call__messager   c                   s  |d }|dkrD|| _ t| j d d}d|v | _|d dk| _|dd	d
d   }||dd d h}|| j	 | _
d S |dkrj| jsQ| jsQ| j
rj| js`d| _| | j I d H  | |I d H  d S |dkr| jsd| _|dd}|dd}t|| jk r|s| | j I d H  | |I d H  d S |s| j|ddI d H }t| j d d}|d ||d kr| j|d< tt||d< ||d< | | j I d H  | |I d H  d S | j|ddI d H }t| j d d}|d ||d kr| j|d< |d= ||d< | | j I d H  | |I d H  d S |dkrE|dd}|dd}| j||dI d H |d< | |I d H  d S |dkr]| | j I d H  | |I d H  d S d S )Nr.   zhttp.response.startr5   )rawzcontent-encodingstatus   zcontent-typer2   ;r   /z/*zhttp.response.bodyTbody    	more_bodyF)rO   r1   zContent-EncodingzContent-Lengthzhttp.response.pathsend)rA   r   rC   rE   r   	partitionstriplower
isdisjointr   rD   rB   r-   lenr    apply_compressionr   add_vary_headerr?   r>   )r)   rG   message_typer5   
media_typemedia_typesrM   rO   r   r   r   rF   i   sp   






z'IdentityResponder.send_with_compressionrM   bytesrO   boolc                  s   |S )zApply compression on the response body.

        If more_body is False, the compression stream is finalized. Compression
        resources are only allocated once a body is actually compressed.
        r   r)   rM   rO   r   r   r   rU      s   z#IdentityResponder.apply_compressionN)r   r   r    r!   r   r$   r   r%   r9   )rG   r   r   r%   rM   rZ   rO   r[   r   rZ   )	r:   r;   r<   __annotations__r=   r*   r7   rF   rU   r   r   r   r   r4   Q   s   
 

Br4   c                      sP   e Zd ZdZ	ddedd fddZedddZdddZdddZ	  Z
S ) r3   r0   r   r   )r#   r   r   r   r    r!   r"   r#   r   r$   r   r%   c                  s(   t  j|||d || _|| _d | _d S )Nr   )superr*   r"   r#   _compressorr(   	__class__r   r   r*      s   	
zGZipResponder.__init__zlib._Compressc                 C  s*   | j d u rt| jtjdtj | _ | j S )N   )r`   zlibcompressobjr"   DEFLATED	MAX_WBITS)r)   r   r   r   
compressor   s   
zGZipResponder.compressorrM   rZ   rO   r[   c                  s>   t || jkrt }tjj| j|||dI d H S | ||S )Nr   )rT   r#   r   r   	to_threadrun_sync_compress_body)r)   rM   rO   r   r   r   r   rU      s
   zGZipResponder.apply_compressionc                 C  s4   |r| j || j tj S | j || j   S r&   )ri   compressflushre   Z_SYNC_FLUSHr\   r   r   r   rl      s   zGZipResponder._compress_body)r   r8   )r   rc   r]   )r:   r;   r<   r?   r=   r*   propertyri   rU   rl   __classcell__r   r   ra   r   r3      s    
r3   rG   r   r   c                   s
   t d)Nzsend awaitable not set)RuntimeError)rG   r   r   r   r@      s   r@   content_typesr$   c                 C  s   t dd | D S )Nc                 s  s&    | ]}| d d   V  qdS )rK   r   N)rP   rQ   rR   ).0content_typer   r   r   	<genexpr>   s   $ z+_normalize_content_types.<locals>.<genexpr>)tuple)rs   r   r   r   r'      s   r'   )r   r   )rG   r   r   r   )rs   r$   r   r$   )
__future__r   re   typingr   anyio.lowlevelr   anyio.to_threadstarlette.datastructuresr   r   starlette.typesr   r   r   r	   r
   r=   lowlevelRunVarr   r^   r   r   r4   r3   r@   r'   r   r   r   r   <module>   s    
%c
%