
    +Jf                     B   d dl Z d dlZd dlZd dlmZmZ d dlmZ 	 d dlm	Z	 n# e
$ r eZ	Y nw xY w ej        d          ZdZ eee j                            dd                    Z ee j                            d	d
                    ZdgZd Z G d de	          ZdS )    N)HttpRequestHttpResponse)patch_vary_headers)MiddlewareMixinz\bbr\b   BROTLI_MODEMODE_GENERICBROTLI_QUALITY   BrotliMiddlewarec                 B    t          j        | t          t                    S N)brotlicompressr   r
   )objs    [/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/django_brotli/middleware.pyr   r      s    ?3^<<<    c                   <    e Zd ZdZdededefdZd ZdedefdZ	dS )	r   a
  
    This middleware compresses content if the browser allows `brotli` compression.
    It sets the Vary header accordingly, so that caches will base their storage
    on the Accept-Encoding header. Code of this middleware is based on Django's `GZipMiddleware`.
    requestresponsereturnc                 R   |                     d          s9|                     |          r$|j        st          |j                  t
          k     r|S t          |d           |j        r%|                     |j                  }||_        |d= nat          |j                  }t          |          t          |j                  k    r|S ||_        t          t          |                    |d<   |                     d          rt          j        dd|d                   |d<   d|d<   |S )NzContent-Encoding)zAccept-EncodingzContent-LengthETagz\"$z;br\"br)
has_header_accepts_brotli_encoding	streaminglencontentMIN_LEN_FOR_RESPONSE_TO_PROCESSr   compress_streamstreaming_contentr   strresub)selfr   r   compressed_contents       r   process_responsez!BrotliMiddleware.process_response$   sG     233	0099	 &		
 ()),KKK O8%9::: 	F!%!5!5h6P!Q!Q);H& )**!)(*:!;!; %&&#h.>*?*???1H),S1C-D-D)E)EH%&v&& 	J!vfh8HIIHV'+#$r   c                     d t          |          D             }d                    |                                          }t          d t	          |          g          }|S )Nc                 8    g | ]}|                     d           S )zutf-8)decode).0lines     r   
<listcomp>z4BrotliMiddleware.compress_stream.<locals>.<listcomp>S   s$    VVVdT[[11VVVr    c                     | S r    )xs    r   <lambda>z2BrotliMiddleware.compress_stream.<locals>.<lambda>U   s    ! r   )listjoinencodemapr   )r&   r"   s     r   r!   z BrotliMiddleware.compress_streamR   sb    VVdCT>U>UVVVGG$566==??h7H.I.I-JKK  r   c                     t          t                              |j                            dd                              S )NHTTP_ACCEPT_ENCODINGr/   )boolRE_ACCEPT_ENCODING_BROTLIsearchMETAget)r&   r   s     r   r   z)BrotliMiddleware._accepts_brotli_encodingZ   s=    %,,  !7<< 
 
 	
r   N)
__name__
__module____qualname____doc__r   r   r(   r!   r:   r   r1   r   r   r   r      s|         ,",.:,	, , , ,\! ! !
 
 
 
 
 
 
 
r   )osr$   r   django.httpr   r   django.utils.cacher   django.utils.deprecationr   ImportErrorobjectcompiler;   r    getattrenvironr>   r   intr
   __all__r   r   r1   r   r   <module>rN      s:   
			 				  1 1 1 1 1 1 1 1 1 1 1 1 1 18888888   OOO 'BJy11 "% gfbjnn]NKKLLRZ^^$4a8899
= = =
B
 B
 B
 B
 B
 B
 B
 B
 B
 B
s   # --