
    y9>i0              	          U d 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mZmZ ddlmZmZ daej        dz  ed<   dad
Zdej        d	dfdZdej        deded	dfdZej        ded	eedz  edz  f         fd            ZddddddddZeeef         ed<    ed e                                D                       Zeeef         ed<   dddZeeef         ed<   ded	eedz  edz  f         fdZ ded	eedz  edz  f         fd Z!d!eded	eedz  edz  f         fd"Z"d#ee         d	edz  fd$Z#i d%d&d'd(d)d*d+d,d-d.d/dd0d1d2d3d4d3d5d6d7d8d9dd:dd;d<d=d>d?d@dAdi dBdCdDdEdFddGdHdIddJddKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^Z$eeef         ed_<   d!eded	edz  fd`Z% e             dS )bzMIME type detection functions.    N)Sequence   )ArchiveMimetypesArchiveCompressions)	log_errorlog_warninglog_info)find_programbacktickmimedbreturnc                      	 t          j        d          an*# t          $ r} t	          d|             Y d} ~ dS d} ~ ww xY wt          t                     dS )z&Initialize the internal MIME database.Fstrictz$could not initialize MIME database: N)	mimetypes	MimeTypesr   	Exceptionr   add_mimedb_data)msgs    M/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/patoolib/mime.pyinit_mimedbr      su    $E222   >>>??? Fs    
?:?c                    d| j         d<   d| j         d<   d| j         d<   d| j         d<   d	| j         d
<   d| j        d<   t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd           t          | dd            t          | d!d"           t          | d#d$           t          | d%d&           t          | d%d'           t          | d(d)           t          | d*d+           t          | d,d-           t          | d.d/           t          | d0d1           t          | d2d3           t          | d4d5           t          | d6d7           t          | d8d9           t          | d:d;           t          | d<d=           t          | d>d?           t          | d@dA           t          | dBdC           t          | dDdE           t          | dFdG           t          | dHdI           t          | dJdK           t          | dLdM           t          | dNdO           t          | dPdQ           t          | dPdR           t          | dPdS           t          | dTdU           t          | dVd
           dWS )Xz5Add missing encodings and mimetypes to MIME database.bzip2z.bz2lzmaz.lzmaxzz.xzlzipz.lzzstdz.zstz.tar.bz2z.tbz2application/x-lzopz.lzoapplication/x-adfz.adfapplication/x-arjz.arjapplication/x-bzip3z.bz3application/x-lzmaapplication/x-xzzapplication/java-archivez.jarapplication/vnd.rarz.rarz.cbrapplication/x-7z-compressedz.7zz.cb7zapplication/x-cabz.cabapplication/x-rpmz.rpmapplication/x-debian-packagez.debapplication/x-acez.acez.cbaapplication/x-archivez.aapplication/x-alzipz.alzapplication/x-arcz.arcapplication/x-lrzipz.lrzapplication/x-lhaz.lhazapplication/x-lzhz.lzhzapplication/x-lz4z.lz4application/x-rzipz.rzapplication/x-zooz.zooapplication/x-dmsz.dmszapplication/x-ms-wimz.wimzapplication/x-zip-compressedz.crxzapplication/x-sharz.sharapplication/x-tarz.cbtzapplication/x-vhdz.vhdaudio/x-apez.apezaudio/x-shnz.shn
audio/flacz.flacapplication/x-chmz.chmzapplication/x-iso9660-imagez.isoapplication/zipz.cbzz.epubz.apkapplication/zpaqz.zpaqapplication/zstdN)encodings_map
suffix_mapadd_mimetype)r   s    r   r   r   *   s^   #*F $*F!"&F"(F#)F !+Fg-v666,f555,f555.777-w777+U3333V<<<.777.7776>>>6???,f555,f5557@@@,f555,f5550$777.777,f555.777,f555,f555,f555-u555,f555,f555/8887@@@-w777,f555,f555//////w///,f5556???*F333*G444*F333+W555+V44444    mimetype	extensionc                 T    || j         d         v }|                     |||           dS )z>Add or replace a mimetype to be used with the given extension.Tr   N)	types_mapadd_type)r   r<   r=   r   s       r   r:   r:   ^   sB     &*400F
OO)F      r;   filenamec                     t          |           \  }}|t          |           \  }}n4t          |           \  }}||k    rt          d|  d| d| d| d	           ||J ||fS )zGuess the MIME type of given filename using file(1) and if that
    fails by looking at the filename extension with the Python mimetypes
    module.

    The result of this function is cached.
    Nz"Different MIME types detected for : z by file(1), z by extension. Preferring .)guess_mime_fileguess_mime_mimedbr	   )rA   mimeencodingmime2
_encoding2s        r   
guess_mimerK   g   s     %X..ND(|*844hh .h77zD==OX O OO O&+O OGKO O O   x///>r;   zapplication/gzipzapplication/x-bzip2zapplication/x-compressr"   zapplication/x-lzipr#   r7   )gzipr   compressr   r   r   r   Encoding2Mimec                     g | ]	\  }}||f
S  rP   ).0_key_vals      r   
<listcomp>rT      s     :::jdDdD\:::r;   Mime2Encodingr$   )zapplication/x-gzipzapplication/x-rarLegacyMimeTypec                 d   d\  }}t           t                               | d          \  }}t           Z|X|Vt          j                            |           \  }}t                               ||                                z   d          \  }}|t          vr|t          v rt          |         }d}||fS )zMGuess MIME type from given filename.
    @return: tuple (mime, encoding)
    NNNFr   )	r   
guess_typeospathsplitextlowerr   r   rN   )rA   rG   rH   rootexts        r   rF   rF      s      ND(**8E*BBhdlx/? G$$X..	c**4#))+++=e*LLh###4G(G(G X&>r;   c                    d\  }}t           j                            |           rHt          d          }|r(t	          ||           \  }}|t          ||           }d}nt          d           |t          v r|dddd| g}	 t          |          	                                
                    d	          }|d
         
                    dd          d
         }n:# t          t          j        f$ r!}t          d| d|            d}Y d}~nd}~ww xY w|t          v rt          |         }|dv s|t          v s|s t!          |           \  }}|t"          v r|}|}n|t"          v r|}t%          |          }||fS )a-  Determine MIME type of filename with file(1):
     (a) using `file --brief --mime-type`
     (b) using `file --brief` and look at the result string
     (c) detect compressed archives (eg. .tar.gz) using
         `file --brief --mime --uncompress --no-sandbox`
    @return: tuple (mime, encoding)
    rX   fileNzUcould not find a 'file' executable, falling back to guess mime type by file extension--briefz--mimez--uncompressz--no-sandbox;r    r   error executing rC   )zapplication/x-emptyzapplication/octet-stream)rZ   r[   isfiler
   guess_mime_file_mimeguess_mime_file_textr	   rU   r   stripsplitOSError
subprocessCalledProcessErrorr   rV   rF   r   get_file_mime_encoding)	rA   rG   rH   	file_progcmdoutpartsrI   err	encoding2s	            r   rE   rE      s     ND(	w~~h 
 ((	 	1)XFFND(|+Ix@@g   })X~~xX	}}**,,22377HQK%%c1--a0EE67 	 	 	7377#77888EEEEEE	 N"""5)E HHH%% &  1::E9((($&&&D-h77H>s   ?AC D,DDro   c                    d\  }}| dd|g}	 t          |                                          }n,# t          $ r}t          d| d|            Y d}~nd}~ww xY w|t          v rt          |         }|t
          vrd\  }}||fS )zhDetermine MIME type of filename with file(1) and --mime option.
    @return: tuple (mime, encoding)
    rX   rb   z--mime-typere   rC   N)r   ri   rk   r   rV   r   )ro   rA   rG   rH   rp   rr   s         r   rg   rg      s      ND(i
9C5}}""$$ 5 5 53s33c33444444445 ~d#####h>s   !/ 
AAApartsc                     | D ]z}|                     d          D ]b}|                    d          rK|                     d          d                                         }t                              |          c c S c{dS )zDGet encoding value from splitted output of file --mime --uncompress.rd   zcompressed-encoding==r   N)rj   
startswithri   rU   get)ru   partsubpartrG   s       r   rn   rn      s     / /zz# 	/ 	/G!!"899 /}}S))!,2244$((......./	/ 4r;   z7-zip archive datar%   zACE archive datar(   zALZ archive datar*   zAmiga DOS diskr   zARJ archive datar    zbzip2 compressed datazbzip3 compressed datar!   zcpio archivezapplication/x-cpiozASCII cpio archivezDebian binary packager'   zFreeArc archivezapplication/x-freearczgzip compressed datazLZMA compressed datazLRZIP compressed datar,   zlzop compressed datar   zMicrosoft Cabinet archive dataz!application/vnd.ms-cab-compressedzRAR archive datazRPM r&   zPOSIX tar archiver1   zxz compressed datazZip archive datar5   zcompress'd datazlzip compressed datazrzip compressed datar.   zcurrent ar archiver)   zLHa r-   zARC archive datar+   zZoo archive datar/   zDMS archive datar0   zMonkey's Audior2   zFLAC audio bitstream datar3   zMS Windows HtmlHelp Datar4   zZPAQ streamr6   FileText2Mimec                 2   | d|g}	 t          |                                          }n-# t          $ r }t          d| d|            Y d}~dS d}~ww xY wt                                          D ]'\  }}|                    |          r|t          v r|c S (dS )z-Determine MIME type of filename with file(1).rb   re   rC   N)r   ri   rk   r   r|   itemsrx   r   )ro   rA   rp   outputrr   matcherrG   s          r   rh   rh   %  s    i
*C#$$&&   3s33c33444ttttt
 ',,..  W%% 	$2B*B*BKKK4s   !) 
AAA)r   N)&__doc__	functoolsrZ   r   rl   collections.abcr    r   r   logr   r   r	   utilr
   r   r   r   __annotations__r   r   strr:   cachetuplerK   rN   dictr~   rU   rV   rF   rE   rg   rn   r|   rh   rP   r;   r   <module>r      s   % $ $     				         $ $ $ $ $ $ 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 ( ( ( ( ( ( ( ( &*	d" ) ) )   15I/ 15D 15 15 15 15h,   PT      sTz3:'=!>    0 "(  
! !tCH~    !%::M$7$7$9$9:::! !tCH~    -.	" "S#X    cDj#*.D(E    (4c 4eC$Jd
,B&C 4 4 4 4n!
3:sTz!"   ,(3- C$J    "!7"!+"! -"! )	"!
 +"! 2"! 2"! ("! ."! ;"! ."! ."! 0"! 2"! 0"!  %&I!"!" -#"! "!$ %"!& ,'"!( ,)"!* )+"!, /-"!. 0/"!0 01"!2 13"!4 5"!6 +7"!8 +9"!: +;"!< m="!>  ?"!@  3A"!B %C"! "!tCH~ " " "JC 3 3:      r;   