
    -hA                         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 dZ G d d          Z G d d          Z G d	 d
e          Zdedej        fdZdS )    N)HeadersMutableHeaders)ASGIAppMessageReceiveScopeSend)ztext/event-streamc            	       @    e Zd ZddedededdfdZd	ed
ededdfdZ	dS )GZipMiddleware  	   appminimum_sizecompresslevelreturnNc                 0    || _         || _        || _        d S N)r   r   r   )selfr   r   r   s       V/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/starlette/middleware/gzip.py__init__zGZipMiddleware.__init__   s    (*    scopereceivesendc                 N  K   |d         dk    r|                      |||           d {V  d S t          |          }d|                    dd          v r"t          | j         | j        | j                  }nt          | j         | j                  } ||||           d {V  d S )Ntypehttp)r   gzipAccept-Encoding )r   )r   r   getGZipResponderr   r   IdentityResponder)r   r   r   r   headers	responders         r   __call__zGZipMiddleware.__call__   s      =F""((5'4000000000F&&&W[[!2B7777%dh0AQUQcdddII)$(D4EFFIiw-----------r   )r   r   )
__name__
__module____qualname__r   intr   r   r   r	   r&    r   r   r   r      sz        + +G +3 +S +Y] + + + +
.E .G .4 .D . . . . . .r   r   c                   j    e Zd ZU eed<   dededdfdZdede	d	e
ddfd
ZdeddfdZdededefdZdS )r#   content_encodingr   r   r   Nc                 r    || _         || _        t          | _        i | _        d| _        d| _        d| _        d S )NF)r   r   unattached_sendr   initial_messagestartedcontent_encoding_setcontent_type_is_excluded)r   r   r   s      r   r   zIdentityResponder.__init__#   s=    ()	(*$)!(-%%%r   r   r   r   c                 \   K   || _         |                     ||| j                   d {V  d S r   )r   r   send_with_compression)r   r   r   r   s       r   r&   zIdentityResponder.__call__,   s>      	hhugt'ABBBBBBBBBBBr   messagec                 l  K   |d         }|dk    r`|| _         t          | j         d                   }d|v | _        |                    dd                              t
                    | _        d S |dk    rY| j        s| j        rK| j        s'd	| _        |                     | j                    d {V  |                     |           d {V  d S |dk    r| j        sd	| _        |                    d
d          }|                    dd          }t          |          | j
        k     r?|s=|                     | j                    d {V  |                     |           d {V  d S |s|                     |d          }t          | j         d                   }|                    d           ||d
         k    r.| j        |d<   t          t          |                    |d<   ||d
<   |                     | j                    d {V  |                     |           d {V  d S |                     |d	          }t          | j         d                   }|                    d           ||d
         k    r| j        |d<   |d= ||d
<   |                     | j                    d {V  |                     |           d {V  d S |dk    rc|                    d
d          }|                    dd          }|                     ||          |d
<   |                     |           d {V  d S d S )Nr   zhttp.response.startr$   )rawzcontent-encodingzcontent-typer    zhttp.response.bodyTbodyr   	more_bodyF)r:   r   zContent-EncodingzContent-Length)r0   r   r2   r!   
startswithDEFAULT_EXCLUDED_CONTENT_TYPESr3   r1   r   lenr   apply_compressionr   add_vary_headerr-   str)r   r6   message_typer$   r9   r:   s         r   r5   z'IdentityResponder.send_with_compression0   s     v000 $+D $"6y"ABBBG(:g(ED%,3KK,K,K,V,VWu,v,vD)))111t7P1TXTq1< 6#ii 4555555555))G$$$$$$$$$$$111$,1DL;;vs++DK77I4yy4,,,Y,ii 4555555555ii((((((((((( )--de-DD(T-A)-LMMM''(9:::76?**262GG./03CIIG,-&*GFOii 4555555555ii((((((((((( --dd-CC(T-A)-LMMM''(9:::76?**262GG./ 01&*GFOii 4555555555ii(((((((((((111;;vs++DK77I"44TY4OOGFO))G$$$$$$$$$$$ 21r   r9   r:   c                    |S )zApply compression on the response body.

        If more_body is False, any compression file should be closed. If it
        isn't, it won't be closed automatically until all background tasks
        complete.
        r+   r   r9   r:   s      r   r>   z#IdentityResponder.apply_compressioni   s	     r   )r'   r(   r)   r@   __annotations__r   r*   r   r   r   r	   r&   r   r5   bytesboolr>   r+   r   r   r#   r#       s         .G .3 .4 . . . .CE CG C4 CD C C C C7%7 7%t 7% 7% 7% 7%re 4 E      r   r#   c            	       f     e Zd ZdZddedededdf fdZd	ed
ede	ddf fdZ
dededefdZ xZS )r"   r   r   r   r   r   r   Nc                     t                                          ||           t          j                    | _        t          j        d| j        |          | _        d S )Nwb)modefileobjr   )superr   ioBytesIOgzip_bufferr   GzipFile	gzip_file)r   r   r   r   	__class__s       r   r   zGZipResponder.__init__v   sK    l+++:<<D$:JZghhhr   r   r   r   c                    K   | j         5  | j        5  t                                          |||           d {V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r   )rO   rQ   rL   r&   )r   r   r   r   rR   s       r   r&   zGZipResponder.__call__|   s       	9 	9t~ 	9 	9''""5'4888888888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s3   A!*A	A!	A	A!A	A!!A%(A%r9   r:   c                   | j                             |           |s| j                                          | j                                        }| j                            d           | j                                         |S )Nr   )rQ   writecloserO   getvalueseektruncaterC   s      r   r>   zGZipResponder.apply_compression   sy    T""" 	#N  """((**a   !!###r   )r   )r'   r(   r)   r-   r   r*   r   r   r   r	   r&   rE   rF   r>   __classcell__)rR   s   @r   r"   r"   s   s        i iG i3 is iSW i i i i i i9E 9G 94 9D 9 9 9 9 9 9	e 	4 	E 	 	 	 	 	 	 	 	r   r"   r6   r   c                 $   K   t          d          )Nzsend awaitable not set)RuntimeError)r6   s    r   r/   r/      s      
/
0
00r   )r   rM   typingstarlette.datastructuresr   r   starlette.typesr   r   r   r   r	   r<   r   r#   r"   NoReturnr/   r+   r   r   <module>ra      s    				  < < < < < < < < B B B B B B B B B B B B B B!7 . . . . . . . .*P P P P P P P Pf    %   217 1v 1 1 1 1 1 1r   