
    3yi:                    r   d dl mZ d dlZd dl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
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ 	 d dlmZ ddl!m"Z"  G d dee"         Z# ejH                  d      dd       Z%d Z& ejN                  d      Z(y# e $ r Y Kw xY w)    )annotationsN)fnmatch)ForeStyle)Future)ThreadPoolExecutor)sha1)utils)MkDocsConfig)PluginError)
BasePlugin)File)which)Image   )OptimizeConfigc                  x     e Zd ZU dZi Zded<    fdZd Zd Zd Z	d Z
d	 Zdd
ZddZddZddZddZ xZS )OptimizePluginTzdict[str, str]manifestc                2    t        |   |i | d| _        y )NF)super__init__is_serve)selfargskwargs	__class__s      b/var/www/html/content_weaver/venv/lib/python3.12/site-packages/material/plugins/optimize/plugin.pyr   zOptimizePlugin.__init__<   s    $)&)     c               n    |dk(  | _         t        | j                  j                        | _        i | _        y )Nserve)r   r   configconcurrencypool	pool_jobs)r   commanddirtys      r   
on_startupzOptimizePlugin.on_startupC   s-    7* 't{{'>'>?	,.r   c                   | j                   j                  sy t        j                  j	                  | j                   j
                        }|| j                   j
                  k7  rt        j                  j                  t        j                  j                  |j                        t        j                  j                  | j                   j
                              | j                   _        t        j                  | j                   j
                  d       t        j                  j                  | j                   j
                  d      | _        t        j                  j                  | j                        rQ| j                   j                  r:	 t        | j                        5 }t        j                   |      | _        d d d        y y y # 1 sw Y   y xY w#  Y y xY w)NTexist_okzmanifest.json)r"   enabledospathabspath	cache_dirjoindirnameconfig_file_pathnormpathmakedirsmanifest_fileisfilecacheopenjsonloadr   )r   r"   r.   fs       r   	on_configzOptimizePlugin.on_configK   sA   {{"" wwt{{4454;;((($&GGLL 7 78  !6!67%DKK! KK--$?  WW\\KK!!?

 77>>$,,-$++2C2C$,,- 1$(IIaLDM1 1 3D-1 1s*   G $G
?G 
GG G Gc                  | j                   j                  sy | j                   j                  sy |j                         D ]  }| j	                  |      rt
        j                  j                  | j                   j                  |j                        }| j                  j                  | j                  |||      | j                  |j                  <   |j                  |        y N)r"   r,   optimizemedia_files_is_excludedr-   r.   r1   r0   src_pathr$   submit_optimize_imager%   abs_src_pathremove)r   envr"   filesfiler.   s         r   on_envzOptimizePlugin.on_envk   s    {{"" {{## %%' 	D  & 77<< 5 5t}}ED04		0@0@$$dD&1DNN4,,-
 LL	r   c               2   | j                   j                  sy | j                   j                  sy | j                  j	                         D ]E  \  }}|j                         r|j                         |j                         }|j                          G | j                   j                  rPt        | j                  d      5 }|j                  t        j                  | j                  dd             d d d        | j                   j                  r}t!        t"        j$                         t!        d       dD ]9  }dx}}| j                  j	                         D ]  \  }}|j                         }t&        j(                  j+                  |      \  }	}
|
dk(  rd	n|
}
|
|k7  rG|t&        j(                  j-                  |      z  }|t&        j(                  j-                  |j.                        z  } |s|s||z
  }d
||z  z
  dz  }t!        d| dt0        j2                   t5        |       t0        j6                   t"        j8                   dt5        |       d|ddt"        j:                          < t!        t"        j:                         y y # 1 sw Y   xY w)Nw   Tindent	sort_keysz  Optimizations:).png.jpgr   .jpegrS   r   d   z    *     ↓ z [3.1f%])r"   r,   r@   r%   items	exceptionresult	copy_filer8   r9   r6   writer:   dumpsr   print_gain_summaryprintr   NORMALr-   r.   splitextgetsizeabs_dest_pathr   GREEN_sizeWHITEDIM	RESET_ALL)r   r"   r.   futurerJ   r<   seeksizesize_opt_	extensiongain_absgain_rels                r   on_post_buildzOptimizePlugin.on_post_build   s3   {{"" {{## !NN002 	!LD&!&&((#]]_ 	! ;;d((#. Q!

4==1$OPQ ;;))%,,$& ) "##x$(NN$8$8$: DLD&!'D $&77#3#3D#9LAy*3w*>II D(   55D0B0B CCHD H#hH !HtO 3s:H vQtzzl5?2C::,uyyk ?+2ht_B ??+-+: %//"E *	Q Qs   =2JJc                   | j                   j                  sy t        j                  dk\  r| j                  j                  d       n| j                  j                          | j                  rh| j                   j                  rQt        | j                  d      5 }|j                  t        j                  | j                  dd             d d d        y y y # 1 sw Y   y xY w)N)   	   T)cancel_futuresrM   rN   rO   )r"   r,   sysversion_infor$   shutdownr   r8   r9   r6   r^   r:   r_   )r   r<   s     r   on_shutdownzOptimizePlugin.on_shutdown   s    {{"" v%II5II  ==T[[..d((#. Q!

4==1$OPQ Q /=Q Qs   2CC c                    |j                   j                  d      r| j                  j                  S |j                   j                  d      r| j                  j                  S y)NrR   rS   rT   F)urlendswithr"   optimize_pngoptimize_jpg)r   rJ   s     r   _is_optimizablezOptimizePlugin._is_optimizable   sP     88f&;;+++ 88./;;+++ r   c                   | j                  |      sy|j                  }| j                  j                  rM| j                  j                  D ]  }t	        |j
                  |      s y t        j                  d| d       y| j                  j                  D ]3  }t	        |j
                  |      st        j                  d| d        y y)NTFzExcluding file 'z' due to inclusion patternsz' due to exclusion patterns)	r   rC   r"   optimize_includer   src_urilogdebugoptimize_exclude)r   rJ   r.   patterns       r   rB   zOptimizePlugin._is_excluded   s    ##D) }};;'';;77 !4<<1 !
 II(.IJK {{33 	Gt||W-		,TF2MNO	 r   c                   t        |j                  d      5 }|j                         }t        |      j	                         }| j
                  j                  |j                  d      }||k7  s t        j                  j                  |      st        j                  t        j                  j                  |      d       |j                  j                  d      r| j                  |||       |j                  j                  d      r| j                  |||       t!        |      }t        j                  j#                  |      }	||	z
  }
d|	|z  z
  dz  }d}|
r?| j$                  j&                  r)|d	z  }|d
j)                  t+        |
      d|ddg      z  }t,        j/                  d|j0                   d
t2        j4                   t+        |	       t2        j6                   t8        j:                   | t8        j<                   	       || j
                  |j                  <   d d d        t        j                  j                  |j>                        }||_        t        j                  jA                  ||      |_!        |S # 1 sw Y   `xY w)Nrb Tr*   rR   r}   r   rU   rW   rV   [rX   rY   zOptimized media file: )"r9   rF   readr	   	hexdigestr   getr~   r-   r.   r7   r5   r2   r   _optimize_image_png_optimize_image_jpglenrd   r"   
print_gainr1   rg   r   infor   r   rf   rh   r   ri   rj   r3   relpathrC   )r   rJ   r.   r"   r<   datahashprevrm   rn   rq   rr   gainroots                 r   rE   zOptimizePlugin._optimize_image   s
   $##T* (	/a668D:'')D ==$$TXXr2Dt|277>>$#7BGGOOD1dC 88$$f.,,T4@ 88$$%67,,T4@ t977??40  (?4/36  6 6GODCHHeHo8D/7L%MNND ,T\\N!zzl5?"3zzl599+dV') +/dhh'Q(	/V wwv667 !GGOOD$7 e(	/ (	/s   HJJ
c                4   t        d      set        j                  j                  |j                        }t        j                  j                  |j
                  |      }t        d| d| d      dddd|d| j                  j                   g}| j                  j                  r|j                  d	       t        j                  g ||j
                         t        j                  j                  |      s!t        j                  |j
                  |       y y )
NpngquantCouldn't optimize image '' in 'zK': 'pngquant' not found. Make sure 'pngquant' is installed and in your pathz--forcez--skip-if-largerz--outputz--speedz--strip)r   r-   r.   r   docs_dirrF   r   r"   optimize_png_speedoptimize_png_stripappend
subprocessrunr7   r
   r]   )r   rJ   r.   r"   docsr   s         r   r   z"OptimizePlugin._optimize_image_png6  s     Z 77??6??3D77??4#4#4d;D+D6v >P Q  )$++889
 ;;))KK	" 	11t0012ww~~d#OOD--t4 $r   c                   t        d      set        j                  j                  |j                        }t        j                  j                  |j
                  |      }t        d| d| d      t        j                  |j
                        }|j                  |d| j                  j                  | j                  j                         y )Nr   r   r   uK   ': install required dependencies – pip install 'mkdocs-material[imaging]'jpeg)qualityprogressive)	_supportsr-   r.   r   r   rF   r   r   r9   saver"   optimize_jpg_qualityoptimize_jpg_progressive)r   rJ   r.   r"   r   images         r   r   z"OptimizePlugin._optimize_image_jpgX  s     !77??6??3D77??4#4#4d;D+D6v >S T  

4,,-

4++::++>> 	 	
r   )rJ   r   )rJ   r   r.   strr"   r   )__name__
__module____qualname__supports_multiple_instancesr   __annotations__r   r(   r=   rK   rs   r{   r   rB   rE   r   r   __classcell__)r   s   @r   r   r   5   sQ    "&  "Hn!/@6;#|Q&23p5D
r   r   )maxsizec                    | t               v S r?   )globals)names    r   r   r   r  s    79r   c                L    dD ]  }t        |       dk  r
| dd| c S | dz  } ! y )N)BkBMBGBTBPBEBZBg     @@rX   rV   )abs)valueunits     r   rg   rg   y  s9    ? u:D\4&))r   zmkdocs.material.optimize)r   r   ))
__future__r   	functoolsr:   loggingr-   r   rx   r   coloramar   r   concurrent.futuresr   concurrent.futures.threadr   hashlibr	   mkdocsr
   mkdocs.config.defaultsr   mkdocs.exceptionsr   mkdocs.pluginsr   mkdocs.structure.filesr   shutilr   PILr   ImportErrorr"   r   r   	lru_cacher   rg   	getLoggerr    r   r   <module>r      s   * #    	  
    % 8   / ) % ' 	 #v
Z/ v
z	 t$ % g23s
  		s   $B. .B65B6