
    ?wg                        d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 	 d dlZdZ G d d	      Zdd
Zedk(  r e e             y# e$ r dZY *w xY w)    )annotationsN)ThreadPoolExecutor)as_completed)BytesIOTFc                  p    e Zd ZdZdddedfdZed        Zd Zd Z	d	 Z
ed
        Zed        Zd Zd Zy)
Compressor)jpgjpegpnggifwebpzipgztgzbz2tbzxzbrswfflvwoffwoff23gp3gppasfavim4vmovmp4mpegmpgwebmwmvNTFc                    || j                   }| j                  |      | _        || _        |xr t        | _        |s|| _        y y N)SKIP_COMPRESS_EXTENSIONSget_extension_reextension_reuse_gzipbrotli_installed
use_brotlilog)self
extensionsr)   r+   r,   quiets         J/var/www/horilla/myenv/lib/python3.12/site-packages/whitenoise/compress.py__init__zCompressor.__init__8   sK     66J 11*= $9)9DH     c           
         | st        j                  d      S t        j                  dj                  dj                  t	        t         j
                  |                   t         j                        S )Nz^$z\.({})$|)recompileformatjoinmapescape
IGNORECASE)r.   s    r0   r'   zCompressor.get_extension_reC   sM    ::d##::!!#((3ryy*+E"FG r2   c                :    | j                   j                  |       S r%   )r(   search)r-   filenames     r0   should_compresszCompressor.should_compressL   s    $$++H555r2   c                     y r%    )r-   messages     r0   r,   zCompressor.logO   s    r2   c                   g }t        |d      5 }t        j                  |j                               }|j	                         }d d d        t              }| j                  rK| j                  |      }| j                  d|||      r$|j                  | j                  ||d             n|S | j                  rH| j                  |      }| j                  d|||      r#|j                  | j                  ||d             |S # 1 sw Y   xY w)NrbBrotliz.brGzipz.gz)openosfstatfilenoreadlenr+   compress_brotliis_compressed_effectivelyappend
write_datar)   compress_gzip)r-   path	filenamesfstat_resultdatasize
compresseds           r0   compresszCompressor.compressR   s    	$ 	((188:.K668D	 4y??--d3J--hdJO  z5+!VW ! ==++D1J--fdD*M  z5+!VW	 	s   4DDc                    t               }t        j                  dd|dd      5 }|j                  |        d d d        |j	                         S # 1 sw Y   |j	                         S xY w)N wb	   r   )r>   modefileobjcompresslevelmtime)r   gzipGzipFilewritegetvalue)rV   outputgz_files      r0   rQ   zCompressor.compress_gzipe   s_     ]]dF!1
 	 MM$	    		    s   AA'c                ,    t        j                  |       S r%   )brotlirY   )rV   s    r0   rM   zCompressor.compress_brotlip   s    t$$r2   c           	         t        |      }|dk(  rd}n
||z  }|dk  }|r+| j                  dj                  |||dz  |dz               |S | j                  d| d| d       |S )	Nr   Fgffffff?z{} compressed {} ({}K -> {}K)i   z	Skipping z (z compression not effective))rL   r,   r7   )r-   encoding_namerR   	orig_sizerV   compressed_sizeis_effectiveratios           r0   rN   z$Compressor.is_compressed_effectivelyt   s    d)> L#i/E D=LHH/66!4d):Ot<S  HHyb7RSTr2   c                    ||z   }t        |d      5 }|j                  |       d d d        t        j                  ||j                  |j
                  f       |S # 1 sw Y   7xY w)Nr\   )rG   rd   rH   utimest_atimest_mtime)r-   rR   rV   suffixrU   r>   rT   s          r0   rP   zCompressor.write_data   s[    &=(D! 	QGGDM	
K00+2F2FGH	 	s   AA#)__name__
__module____qualname__r&   printr1   staticmethodr'   r?   r,   rY   rQ   rM   rN   rP   rA   r2   r0   r   r      ss    ! H 5PU	  6& ! ! % %"r2   r   c                   t        j                  d      }|j                  dddd       |j                  dd	d
d       |j                  ddd
d       |j                  dd       dj                  t        j
                        }|j                  dddd| dz   t        j
                         |j                  |       }t	        |j                  |j                  |j                  |j                        }t               5 }g }t        j                  |j                        D ]h  \  }}}	|	D ]]  }
|j                  |
      s|j!                  |j#                  |j$                  t        j&                  j                  ||
                   _ j t)        |      D ]  }|j+                           	 d d d        y# 1 sw Y   yxY w)NzSearch for all files inside <root> *not* matching <extensions> and produce compressed versions with '.gz' and '.br' suffixes (as long as this results in a smaller file))descriptionz-qz--quietzDon't produce log output
store_true)helpactionz	--no-gzipzDon't produce gzip '.gz' filesstore_falser)   )r}   r~   destz--no-brotliz Don't produce brotli '.br' filesr+   rootz(Path root from which to search for files)r}   z, r.   *z,File extensions to exclude from compression z
(default: ))nargsr}   default)r.   r)   r+   r/   r   )argparseArgumentParseradd_argumentr8   r   r&   
parse_argsr.   r)   r+   r/   r   rH   walkr   r?   rO   submitrY   rR   r   result)argvparserdefault_excludeargs
compressorexecutorfuturesdirpath_dirsfilesr>   futures               r0   mainr      s   $$F i8   -	   /	   %OPii
 C CDO
:?+1-. 33   T"D????jj	J 
	 %'WWTYY%7 	!GUE! --h7NN &//gx1P	 #7+ 	FMMO	  s   ?F;A-F;;G__main__r%   )
__future__r   r   rb   rH   r5   concurrent.futuresr   r   ior   ri   r*   ImportErrorr   r   ru   
SystemExitrA   r2   r0   <module>r      sr    "   	 	 1 + 
w wt8v z
TV
 s  s   A AA