
    y9>i              	          d 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Zddlm	Z	 ddl
mZ  G d de          Zd+d
e	e         dededefdZdefdZ	 d,d
e	e         dededefdZ	 d-d
e	e         de	e         dedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdefdZdededefd Zej        dededz  fd!            Zdefd"Zdefd#Zdefd$Z defd%Z!defd&Z"d'edefd(Z#d)e	e         defd*Z$dS ).zUtility functions.    N)Sequence   )log_infoc                       e Zd ZdZdS )PatoolErrorzRaised when errors occur.N)__name__
__module____qualname____doc__     M/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/patoolib/util.pyr   r      s        ####r   r   utf-8Tcmdencodingcheckreturnc                 R    t          j        | t           j        ||d          j        S )z#Return decoded output from command.replace)stdoutr   r   errors)
subprocessrunPIPEr   )r   r   r   s      r   backtickr       s+    >JO58I  r   c                      t           j        dk    o>t          j        duo0t          j                                                            d          S )z?Return True iff this script is run with pythonw.exe on Windows.ntNzpythonw.exe)osnamesys
executablelowerendswithr   r   r   run_under_pythonwr$   '   sE     	4 	;N$&	;N  ""++M::r   	verbosityinteractivec                 >   |dk    r:d                     t          t          |                     }t          d|            t	                      rt
          j        |d<   |sd|d<   |dk     rt
          j        |d<   |d	k     rt
          j        |d
<   |rs|dk    rCd                     d |                                D                       }t          d|            |	                    d          rd                     |           } t          j
        | fddi|}|j        S )zIRun command without error checking.
    @return: command return code
    r    zrunning creationflags inputr   r   stderr, c              3   ^   K   | ](\  }}| d t          t          |                     V  )dS )=N)shell_quotestr).0kvs      r   	<genexpr>zrun.<locals>.<genexpr>K   sB      UUda99KA$7$799UUUUUUr   z	    with shellr   F)joinmapshell_quote_ntr   r$   r   CREATE_NO_WINDOWDEVNULLitemsgetr   
returncode)r   r%   r&   kwargsinforess         r   r   r   0   s5    A~~xxNC0011"D""### 
 ' 	  w1}}%-x2~~%-x  q==99UUfllnnUUUUUD'''(((::g 	 ((3--C
.
4
4E
4V
4
4C>r   r   ret_okc                 Z    t          | fd|i|}||vrd|  d| }t          |          |S )z+Run command and raise PatoolError on error.r&   z	Command `z ' returned non-zero exit status )r   r   )r   rD   r&   r@   retcodemsgs         r   run_checkedrH   T   sQ     #99;9&99GfH#HHwHH#Nr   valuec                 ^    t           j        dk    rt          |           S t          |           S )zQuote all shell metacharacters in given string value with strong
    (i.e. single) quotes, handling the single quote especially.
    r   )r   r   r:   shell_quote_unixrI   s    r   r1   r1   _   s+     
w$e$$$E"""r   c                 :    |                      dd          } d|  dS )zQuote argument for Unix system.'z'\'')r   rL   s    r   rK   rK   h   s#    MM#w''Eu<<<r   c                     d| v rd|  dS | S )z^Quote argument for Windows system. Modeled after distutils
    _nt_quote_args() function.
    r(   "r   rL   s    r   r:   r:   n   s      e||5|||Lr   programc                     t          |           }|r>t          |dg          }t          t          j        d|t          j                            S dS )zDetermine if the RAR codec is installed for 7z program.
    If installed, `7z i` will print something like
    ...
    Codecs:
    1   D    40301 Rar1
    1   D    40302 Rar2
    1   D    40303 Rar3
    1   D    40305 Rar5
    ...
    iz Rar\d$Ffind_programr   boolresearch	MULTILINErQ   _7zformatss      r   p7zip_supports_rarr]   w   sN     w

C
 BC:&&BIj'2<@@AAA5r   c                     t          |           }|r>t          |dg          }t          t          j        d|t          j                            S dS )zDetermine if COMPRESS (.Z) archives are supported for 7z program.
    If installed, `7z i` will print something like
    ...
    Formats:
    0  ......................  Z        z taz (.tar)  1F 9D
    ...
    rS   zZ\s+z\s+tazFrT   rZ   s      r   p7zip_supports_compressr_      sN     w

C
 FC:&&BIngr|DDEEE5r   c                     t           j                            dt           j                  } t           j        dk    rTt          | t                                } t          | t                                } t          | t                                } t                      }t           j
                            |          rEt          j        |          D ]0}t          | t           j
                            ||                    } 1| S )z>Get the list of directories to search for executable programs.PATHr   )r   environr>   defpathr   append_to_pathget_nt_7z_dirget_nt_mac_dirget_nt_winrar_dirget_peazip_addon_dirpathisdirlistdirr8   )ri   
peazip_dirsubdirs      r   system_search_pathrn      s    :>>&"*--D	w$dMOO44dN$4$455d$5$7$788%''J	w}}Z   Jj,, 	J 	JF!$Z(H(HIIDDKr   ri   	directoryc                     t           j                            |          r|| v r| S |                     t           j                  s| t           j        z  } | |z   S )zVAdd a directory to the PATH environment variable, if it is a valid
    directory.
    )r   ri   rj   r#   pathsep)ri   ro   s     r   rd   rd      sV     7==## yD'8'8==$$ 
)r   c                 F    t          j        | t                                S )zLook for given program.)ri   )shutilwhichrn   )rQ   s    r   rU   rU      s      <&8&:&:;;;;r   c                     ddl } ddl} |j                    d         }d}	 |dk    rM |j                                        d          r+|                     | j        |d| j        | j        z            }n|                     | j        |          }	 | 	                    |d          d         | 
                    |           S # | 
                    |           w xY w# t          $ r Y dS w xY w)z9Return 7-Zip directory from registry, or an empty string.r   NzSOFTWARE\7-Zip32bit64Pathr*   )winregplatformarchitecturemachiner#   OpenKeyHKEY_LOCAL_MACHINEKEY_READKEY_WOW64_64KEYQueryValueExCloseKeyOSError)ry   rz   python_bitskeynamekeys        r   re   re      s   MMMOOO'('))!,KG'!!&6h&6&8&8&A&A$&G&G!..)&"88	 CC ..!:GDDC	!&&sF33A6OOC    FOOC       rrs*   A.C C +C CC 
C)(C)c                  D    d} t           j                            |           S )z+Return the Windows program files directory.z%ProgramFiles%)r   ri   
expandvars)progvars    r   get_nt_program_dirr      s    G7g&&&r   c                  Z    t           j                            t                      d          S )z/Return Monkey Audio Compressor (MAC) directory.zMonkey's Audior   ri   r8   r   r   r   r   rf   rf      s     7<<*,,.>???r   c                  Z    t           j                            t                      d          S )zReturn WinRAR directory.WinRARr   r   r   r   rg   rg      s    7<<*,,h777r   c                      t          j                    dk    rdS t          j                    dk    rdS t          j                    dk    rdS dS )z3Get platform-dependen directory for PeaZip add-ons.Windowsz C:\Program Files\PeaZip\res\bin\Linuxz/usr/lib/peazip/res/bin/Darwinz+/Applications/peazip.app/Content/MacOS/bin/r*   )rz   systemr   r   r   rh   rh      sR    I%%66G##))H$$<<2r   arc_exec                 6    t          | gd          }d|v rdndS )zIf running arc_exe without options prints "FreeArc" in its output assume
    the given arc_exe supports the freearc format. Else assume arc format support.
    F)r   FreeArcfreearcarc)r   )r   helptexts     r   get_arc_formatr      s,     	///H!X--9958r   alistc                     t          |           dk    r,d                    | dd                   }| d         }| d| S d                    |           S )zCReturn comma separated string, and last entry appended with ' or '.r   r.   Nr,   z or )lenr8   )r   headtails      r   strlist_with_orr      sY    
5zzA~~yyss$$Ry""D"""99Ur   )r   T)r   T)rC   T)%r   	functoolsr   rW   rz   r    rs   r   collections.abcr   logr   	Exceptionr   r2   rV   r   r$   intr   rH   r1   rK   r:   r]   r_   rn   rd   cacherU   re   r   rf   rg   rh   r   r   r   r   r   <module>r      s         				 				  



      $ $ $ $ $ $      $ $ $ $ $) $ $ $ (3- 3  QT    4     AE! !	#!#&!9=!! ! ! !J KO 	# (CG   #s #s # # # #C C    # #         $S T    C            <# <#* < < < <
s    4'C ' ' ' '@ @ @ @ @
83 8 8 8 8
c    9C 9C 9 9 9 98C= S      r   