
    9f;                     x   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKJr  S SKJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJrJr  \ R<                  " \5      r  " S S	\!5      r"\
" S
S9 " S S5      5       r#S\S\4S jr$S?S\S\%SS4S jjr&S\SS4S jr'S\SS4S jr(S\)S\4S jr*S\S\\)   S\4S jr+\(       a  S\S\\\\4   4S jr,OS\S\\\\4   4S jr,S\S\4S jr-S \\)\)4   S\\)\)4   4S! jr.      S@S"\\\)\4      S#\%S$\%S%\\)   S&\%S'\%S(\\)   SS)4S* jjr/S?S+S)S,\%SS4S- jjr0S.\\\)\4      S\\\)\4      4S/ jr1S0\)S1\)SS4S2 jr2    SAS3 jr3  SBS"\\\)\4      S \\\)\)4      S4\\\)      S\4S5 jjr4S6\)S7\)S\)4S8 jr5SCS9\)S:\)S;\%S\)4S< jjr6S\S=\4S> jr7g)D    N)	dataclass)Path)	AnyDictListNoReturnOptionalPatternSequenceTupleUnion)paths)show_cursor)MINGWWINDOWSc                   8   ^  \ rS rSrSS\S\4U 4S jjjrSrU =r$ )	PipxError   messagewrap_messagec                 d   > U(       a  [         TU ]  [        U5      5        g [         TU ]  U5        g N)super__init__	pipx_wrap)selfr   r   	__class__s      +/usr/lib/python3/dist-packages/pipx/util.pyr   PipxError.__init__    s%    GYw/0GW%     T)	__name__
__module____qualname____firstlineno__strboolr   __static_attributes____classcell__)r   s   @r   r   r      s    & &4 & &r    r   T)frozenc                   0    \ rS rSr% \\   \S'   \\S'   Srg)RelevantSearch'   patterncategoryr!   N)r#   r$   r%   r&   r
   r'   __annotations__r)   r!   r    r   r-   r-   '   s    S\Mr    r-   pathreturnc                 h   [         R                  R                  R                  5       (       d(  [         R                  R                  R	                  5         SR                  [        R                  " [        R                  SS95      n[         R                  R                  U SU R                   3-  $ )N    )k.)r   ctxtrashis_dirmkdirjoinrandomchoicesstringascii_lowercasename)r2   prefixs     r   _get_trash_filerD   -   sn    99??!!##		WWV^^F$:$:a@AF99??xq444r    safe_rmc                 \   U R                  5       (       d  g [        R                  SU  35        [        R                  " XS9  U R                  5       (       aU  U(       a4  [        R                  SU  S35        U R                  [        U 5      5        g [        R                  SU  S35        g g )Nzremoving directory )ignore_errorszFailed to delete z0. Will move it to a temp folder to delete later.z%. You may need to delete it manually.)r;   loggerinfoshutilrmtreewarningrenamerD   )r2   rE   s     r   rmdirrN   4   s    ;;==
KK%dV,-
 MM$. {{}}NN.tf4defKK-.NN.tf4YZ[ r    c                     U R                  5       (       a  g [        R                  SU  35        U R                  SSS9  g )Nzcreating directory Tparentsexist_ok)r;   rH   rI   r<   )r2   s    r   r<   r<   I   s4    {{}}
KK%dV,-JJtdJ+r    filec                     U R                  5       (       d  g  U R                  5         g ! [         a    U R                  [	        U 5      5         g f = fr   )is_fileunlinkPermissionErrorrM   rD   rS   s    r   safe_unlinkrY   P   s@    
 <<>>+ +OD)*+s   ) $AAbinary_namec                     [        S5      [        [        R                  R                  5      S-   [        [        R                  R
                  5      -   -  S-  S-  U -  $ )N__pypackages__r8   libbin)r   r'   sysversion_infomajorminor)rZ   s    r   get_pypackage_bin_pathrc   ]   sa    s%%&,s33C3C3I3I/JJ	L
	 	 		r    bin_pathargsc                     [        [        U R                  5       5      /U-   S[        U R                  R                  5      /S9  g )Nr8   )extra_python_paths)exec_appr'   resolveparent)rd   re   s     r   run_pypackage_binrk   g   s:    	X	 !D(X__%;%;!<=r    rootc                 n    U R                  5       n [        (       d  U S-  OU S-  nUS-  nU S-  S-  nXU4$ )NScriptsr^   z
python.exeshareman)ri   r   rl   rd   python_pathman_paths       r   get_venv_pathsrt   p   sF     ||~+054)#dUl-'>E)h..r    c                 .    U S-  nUS-  nU S-  S-  nXU4$ )Nr^   pythonro   rp   r!   rq   s       r   rt   rt   |   s.    %<)'>E)h..r    rv   c                     [        U SS/SS9R                  n[        UR                  5       5      nUR	                  SSS9  U$ )Nz-cz6import sysconfig; print(sysconfig.get_path('purelib'))F)capture_stderrTrP   )run_subprocessstdoutr   stripr<   )rv   outputr2   s      r   get_site_packagesr}      sK    	OP f  DJJtdJ+Kr    envc                 l    SS/nU H  nU R                  US 5        M     SU S'   SU S'   SU S'   SU S	'   U $ )
N
PYTHONPATH__PYVENV_LAUNCHER__1PIP_DISABLE_PIP_VERSION_CHECKutf-8PYTHONIOENCODINGPYTHONLEGACYWINDOWSSTDIO0PIP_USER)pop)r~   env_blocklistenv_to_removes      r   _fix_subprocess_envr      sX     "#89M&t$ ' ,/C'(%C&-C"#C
OJr    cmdcapture_stdoutrx   log_cmd_str
log_stdout
log_stderrrun_dir subprocess.CompletedProcess[str]c                    [        [        R                  5      n[        U5      nUc  SR	                  S U  5       5      n[
        R                  SU 35        U(       a  [        R                  " USS9  U  Vs/ s H  n[        U5      PM     n	n[        R                  " U	UU(       a  [        R                  OSU(       a  [        R                  OSSSSUS	9n
U(       a7  U(       a0  [
        R                  S
U
R                   3R                  5       5        U(       a7  U(       a0  [
        R                  SU
R                   3R                  5       5        [
        R                  SU
R                    35        U
$ s  snf )z?Run arbitrary command as subprocess, capturing stderr and stoutN c              3   8   #    U  H  n[        U5      v   M     g 7fr   )r'   ).0cs     r   	<genexpr>!run_subprocess.<locals>.<genexpr>   s     3s!s1vvss   zrunning T)rR   r   F)r~   rz   stderrencodingtextcheckcwdzstdout: zstderr: zreturncode: )dictosenvironr   r=   rH   rI   makedirsr'   
subprocessrunPIPEdebugrz   rstripr   
returncode)r   r   rx   r   r   r   r   r~   r   cmd_str_listcompleted_processs              r   ry   ry      s%    rzz
C
c
"Chh3s33
KK(;-()
Gd+$'(CqCFCL( #"0zd"0zd	 *x 1 8 89:AACD*x 1 8 89:AACD
LL< 1 < <=>?+ )s   8E8r   raise_errorc           
         U R                   (       a  U R                  b#  [        U R                  [        R                  SS9  U R                  b#  [        U R                  [        R                  SS9  U(       aB  [        SR                  U R                   Vs/ s H  n[        U5      PM     sn5      < S35      e[        R                  SR                  U R                  5      < S35        g g s  snf )Nr5   rS   endr    failed)r   rz   printr_   r   r   r=   re   r'   rH   rI   )r   r   xs      r   subprocess_post_checkr      s    ####/#**D##/#**Dsxx9J9O9O(P9OAQ9O(PQTT[\]]KK388$5$:$:;>gFG $ )Qs   C/
input_listc                     / n[        5       nU  H3  nUS   U;  d  M  UR                  U5        UR                  US   5        M5     U$ )Nr   )setappendadd)r   output_listseenr   s       r   dedup_orderedr      sI    K5DQ4tq!HHQqTN 
 r    
pip_stdout
pip_stderrc                    Sn/ nSnU R                  S5       H  n[        R                  " SU5      n[        R                  " SU5      nU(       a-  UR                  S5      R	                  5       R                  5       nU(       d  Mn  UR                  S5      nM     [        [        R                  " S[        R                  5      S5      [        [        R                  " S	[        R                  5      S
5      [        [        R                  " S5      S5      [        [        R                  " S[        R                  5      S5      [        [        R                  " S[        R                  5      S5      [        [        R                  " S[        R                  5      S5      /n[        R                  " S5      n	/ n
[        5       nUR                  S5       H  nU	R                  U5      nU(       a   UR                  UR                  S5      5        U HQ  nUR                  R                  U5      (       d  M%  U
R                  UR	                  5       UR                  45          M     M     U(       aX  SR                  U5      n[        U5      S:  a  SOSn[        S[         R"                  S9  [$        R'                  SU SU 35        OU(       aX  SR                  U5      n[        U5      S:  a  SOSn[        S[         R"                  S9  [$        R'                  SU SU 35        O3Ub0  [        S[         R"                  S9  [$        R'                  SU 35        [)        U
5      n
U
(       a  [        S[         R"                  S9  U Vs/ s H  nUR                  PM     nnU
R+                  5       n[        U5      S:  a]  [        U5      U:  aN  UR-                  S5        U
 Vs/ s H  nUS   U;   d  M  UPM     nn[        U5      S:  a  [        U5      U:  a  MN  U H!  n[        SUS    3[         R"                  S9  M#     ggs  snf s  snf ) a  Extract useful errors from pip output of failed install

Print the module that failed to build
Print some of the most relevant errors from the pip output

Example pip stderr line for each "relevant" type:
    not_found
        Package cairo was not found in the pkg-config search path.
        src/common.h:34:10: fatal error: 'stdio.h' file not found
        The headers or library files could not be found for zlib,
    no_such
        unable to execute 'gcc': No such file or directory
        build\test1.c(2): fatal error C1083: Cannot open include file: 'cpuid.h': No such file ...
    exception_error
        Exception: Unable to find OpenSSL >= 1.0 headers. (Looked here: ...
    fatal_error
        LINK : fatal error LNK1104: cannot open file 'kernel32.lib'
    conflict_
        ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/...
    error_
        error: can't copy 'lib\ansible\module_utils\ansible_release.py': doesn't exist ...
        build\test1.c(4): error C2146: syntax error: missing ';' before identifier 'x'

   N
zFailed to build\s+(\S.+)$z^\s*Collecting\s+(\S+)   znot (?:be )?found	not_foundzno suchno_suchz(Exception|Error):\s*\S+exception_errorzfatal errorfatal_errorconflict	conflict_zerror:(?!.+Command errored out)(?!.+failed building wheel for)(?!.+could not build wheels? for)(?!.+failed to build one or more wheels).+[^:]$error_z/Failed to build\s+(?!one or more packages)(\S+)z
    sr5   rX   zpip failed to build packagez:
    z#pip seemed to fail to build packagez)pip seemed to fail to build package:
    z0
Some possibly relevant errors from pip install:z    r   )splitresearchgroupr{   r-   compileIr   r   r/   r   r0   r=   lenr   r_   r   rH   errorr   copyr   )r   r   max_relevant_errorsfailed_build_stdoutlast_collecting_deplinefailed_matchcollecting_matchrelevant_searchesfailed_stderr_pattrelevants_savedfailed_build_stderrfailed_build_matchrelevant_searchfailed_to_build_str
plural_strr   print_categoriesrelevants_saved_filteredrelevant_saveds                       r   analyze_pip_outputr      s   0 %')-   &yy!=tD99%>E"."4"4Q"7"="="?"E"E"G"2"8"8"; ' 	rzz"6={Krzz*bdd3Y?rzz"=>@QRrzz."$$7Grzz+rtt4kBJJ  	
( $VWO%  &/66t<##$6$<$<Q$?@0O&&--d33&&

o6N6N'OP  1 ' &mm,?@ 34q8Sb
bszz"2:,gFYEZ[\	&mm,?@ 34q8Sb
bszz"::,gNaMbcd		(bszz"ABUAVWX#O4OA

S0AB0A1AJJ0AB#2#7#7#9 #$q(s3K/LOb/b  $3B'_?aadN^F^?$'_ #$q(s3K/LOb/b 7ND*+,3::> 7  C (`s   
Q%Q6Qc                    U R                   (       Gab  [        R                  SR                  U R                  5      < S35        [
        R                  R                  c  [        S5      e[
        R                  R                  R                  [
        R                  R                  R                  S-   -  nUR                  SSS9 n[        SUS	9  [        S
US	9  U R                  b  [        U R                  USS9  [        SUS	9  [        S
US	9  U R                  b  [        U R                  USS9  S S S 5        [        R                  SU 35        [!        U R                  U R                  5        g g ! , (       d  f       NH= f)Nr   r   z)Pipx internal error: No log_file present.z_pip_errors.logar   )r   z
PIP STDOUTrX   z
----------r5   r   z
PIP STDERRzJFatal error from pip prevented installation. Full pip output in file:
    )r   rH   rI   r=   re   r   r9   log_filer   rj   stemopenr   rz   r   r   r   )r   pip_error_filepip_error_fhs      r   &subprocess_post_check_handle_pip_errorr   H  s>    ###sxx 1 6 67:'BC99%GHH++22eii6H6H6M6MPa6ab  w 7<,\2,\2 ''3'..\rJ.|4,\2 ''3'..\rJ 8 	bcqbrst,335F5M5MN% $ 87s   A-E66
Frg   c                    Uc  [        [        R                  5      n[        U5      nUb  [        R                  R
                  R                  U[        R                  " S5      (       a>  [        R                  " SS5      R                  [        R                  R
                  5      O/ -   5      US'   [        5         [        R                  SSR                  U  Vs/ s H  n[        U5      PM     sn5      -   5        [        (       a9  [        R                  " [         R"                  " U USSSSSS	9R$                  5        g[        R&                  " [        U S
   5      U  Vs/ s H  n[        U5      PM     snU5        gs  snf s  snf )zRun command, do not return

POSIX: replace current process with command using os.exec*()
Windows: Use subprocess and sys.exit() to run command
Nr   r5   z
exec_app: r   r   TF)r~   rz   r   r   r   r   r   )r   r   r   r   r2   pathsepr=   getenvr   r   rH   rI   r'   r   r_   exitr   r   r   execvpe)r   r~   rg   r   r   s        r   rh   rh   `  s#    {2::
c
"C%GGOO00XZXaXabnXoXo"))L""="C"CBGGOO"Tuwx
L
 M
KKsxx(=AQ(=>>?wNN  j
	
 	

3s1v; 5AQ 5s; )> !6s   F#F
package_namepackage_specc                      X:X  a  U $ U  SU< 3$ )Nz from spec r!   )r   r   s     r   full_package_descriptionr     s     #{<*:;;r    r   subsequent_indentkeep_newlinesc                 x   Sn[        [        R                  " S5      R                  U5      S-
  n[        R
                  " U 5      R                  5       n U(       aE  SR                  U R                  5        Vs/ s H  n[        R                  " UUUSS9PM     sn5      $ [        R                  " U UUSS9$ s  snf )zGDedent, strip, wrap to shell width. Don't break on hyphens, only spaces(   )P   r      r   F)widthr   break_on_hyphens)
maxrJ   get_terminal_sizecolumnstextwrapdedentr{   r=   
splitlinesfill)r   r   r   minimum_widthr   r   s         r   r   r     s    M((2::MJQNE??4 &&(Dyy !OO- .D &7%*	 .

 
	
 }}/"	
 	
s   8!B7rj   c                      U R                  5       R                  UR                  5       5        g! [         a     gf = f)NFT)ri   relative_to
ValueError)r2   rj   s     r   is_paths_relativer
    s;    ""6>>#34   s   -0 
==r"   )TTNTTN)r   r   r3   N)NN)r5   F)8loggingr   r>   r   rJ   r@   r   r_   r  dataclassesr   pathlibr   typingr   r   r   r   r	   r
   r   r   r   pipxr   pipx.animater   pipx.constantsr   r   	getLoggerr#   rH   	Exceptionr   r-   rD   r(   rN   r<   rY   r'   rc   rk   rt   r}   r   ry   r   r   r   r   rh   r   r   r
  r!   r    r   <module>r     s!    	  	    
  ! 
 
 
  $ )			8	$&	 & $  
5$ 54 5\ \t \t \*, , ,
+d 
+t 
+   DI (  /T /eD$,<&= //T /eD$,<&= /d t T#s(^ S#X *  !%!(	%T	"	#(( ( #	(
 ( ( c]( ((V	H-O 	H^b 	Hnr 	Hd5c?3 U38_8M c?3 c?C c?D c?LO9O	O4 %).2&<	%T	"	#&<	$sCx.	!&< !c+&< 	&<R<3 <c <c <
C 
C 
T 
VY 
6D $ r    