
    9f0                     L   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  S SKJrJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJrJ r J!r!J"r"J#r#J$r$  S SK%J&r&  \RN                  S:  a  S SK(r)OS SK)r)\RT                  " \+5      r,Sr-Sr.S\/S\0S\\\/\
4      4S jr1S\\/\
4   S\\/   S\/S\\/   S\\/   S\0S\0S\4S jr2S\/S\/S\\/   S\/S\\/   S\\/   S\0S\0S\0S\4S jr3S\/S\/S\0S\\/   S\/S\\/   S\\/   S\0S\0S\0S\4S jr4S \
S\/S\/S!\/S\\/   S\/S\\/   S\\/   S\0S\0S\4S" jr5S#\\/   S\/S\\/   S\\/   S\
4
S$ jr6S \
S\04S% jr7S&\&S'\\
   S\0SS4S( jr8S.S) jr9S*\/S\/4S+ jr:\Rv                  " S,5      r<S\\/\
4   S\\\/      4S- jr=g)/    N)Path)which)ListNoReturnOptionalUnion)InvalidRequirementRequirement)paths)package_name_from_spec)#TEMP_VENV_EXPIRATION_THRESHOLD_DAYSWINDOWS)hazard)	PipxErrorexec_appget_pypackage_bin_path	pipx_wraprmdirrun_pypackage_bin)Venv)      pipx_expired_venvzn'{app}' executable script not found in package '{package_name}'.
Available executable scripts:
    {app_lines}appis_pathreturnc                 R   [        U 5      nUR                  5       (       a  U$ U(       a  [        SU  S35      e[        R                  R                  U 5      R                  (       aA  U R                  S5      (       d  [        S5      e[        R                  S5        [        U 5      $ g )NzThe specified path z does not existz.pyz
                pipx will only execute apps from the internet directly if they
                end with '.py'. To run from an SVN, try pipx --spec URL BINARY
                z9Detected url. Downloading and executing as a Python file.)r   is_filer   urllibparseurlparseschemeendswithloggerinfo_http_get_request)r   r   app_paths      3/usr/lib/python3/dist-packages/pipx/commands/run.pymaybe_script_contentr)   -   s    
 CyH	-cU/BCC ||S!((||E""  	OP %%     contentapp_argspythonpip_args	venv_argsverbose	use_cachec                    [        U 5      nUc  [        U5      nO[        XrX45      n	[        U	5      n
[	        U
S U5        U	R                  5       (       a  [        R                  SU	 35        O;[        XUS9n
U
R                  X5S9  U
R                  XC5        U
R                  Xs5        U
R                  n[        U [        5      (       a  [        X/UQ5        g [        USU /UQ5        g )NReusing cached venv r-   r0   r.   r0   z-c)_get_requirements_from_scriptr   _get_temporary_venv_pathr   _prepare_venv_cacheexistsr$   r%   check_upgrade_shared_libscreate_venvinstall_unmanaged_packagespython_path
isinstancer   )r+   r,   r-   r.   r/   r0   r1   requirementsr=   venv_dirvenvs              r(   
run_scriptrB   I   s     19L6l ,L(VH~D$	2??KK.xj9:AD**H*NY1++LC&&'4  +223+tW8x89r*   package_or_url
pypackagesc	                    [        U 5      (       a4  [        R                  [        S[         SU  S[        U 5       S3SS95        [
        (       a   U  S3n	[        R                  SU	< S	35        OU n	[        U 5      n
U
R                  5       (       a$  [        R                  S
U
 S35        [        X5        U(       a  [        SU
 S35      e[        U/X4U5      n[        U5      nUR                  U	-  n[        XU5        UR                  X	5      (       a+  [        R                  SU 35        UR!                  X	U5        g [        R                  SU 35        [#        [%        U5      UU U	UUUUUU5
        g )Nz
                z  z: is already on your PATH and installed at
                z2. Downloading and running anyway.
                    subsequent_indent.exeAssuming app is  (Windows only)z0Using app in local __pypackages__ directory at ''z2
            '--pypackages' flag was passed, but 'z' was
            not found. See https://github.com/cs01/pythonloc to learn how to
            install here, or omit the flag.
            r3   zvenv location is )r   r$   warningr   r   r   r%   r   r9   r   r   r7   r   bin_pathr8   has_apprun_app_download_and_runr   )r   rC   r,   r-   r.   r/   rD   r0   r1   app_filenamepypackage_bin_pathr@   rA   rN   s                 r(   run_packagerT   o   s    Szz3%  s  #*	
 wd|&|&6oFG/4  ""FGYFZZ[\],722D1E F
 	
 ((8&IVH>D}}|+H	2||C&&*8*56S1'z23N	
r*   specc
                      [        U 5      R                  n
Ub  SO
[        X5      nUb  [	        XXEXhU	5        gUb  UOU n[        U
UUUUUUUU	5	        g! [         a    U n
 NKf = f)zMInstalls venv to temporary dir (or reuses cache), then runs app from
package
N)r
   namer	   r)   rB   rT   )r   rU   r   r,   r-   r.   r/   rD   r0   r1   package_namer+   rC   s                r(   runrY      s    ""3',, &d,@,NG7f	IV!%!1s
	
   s   A A#"A#r@   rR   c
           	        ^ [        XU	S9n
U
R                  XiS9  U
R                  R                  R                  b!  U
R                  R                  R                  nO[        TXVU	S9nUS:H  nU
R                  XvU5        U
R                  UTUSSSS9  U
R                  X#5      (       d  U
R                  R                  R                  nX+:X  aU  [        U5      S:X  aF  US   n[        S	U< S
U< 35        [        (       a   U S3n[        R                  SU< S35        O;UnO8U4S jU 5       n[        [         R#                  UUSR%                  U5      S9SS9eU(       d  U [&        -  R)                  5         U
R+                  X#U5        g )Nr4   r5   pipFT)rX   rC   r.   include_dependenciesinclude_appsis_main_package   r   zNOTE: running app z from rI   rJ   rK   c              3   8   >#    U  H  o S T SU S3v   M     g7f)z - usage: 'pipx run --spec  z [arguments?]'N ).0arC   s     r(   	<genexpr>$_download_and_run.<locals>.<genexpr>  s'     jei`a#88H!N[eis   z
    )r   rX   	app_lines)wrap_message)r   r:   pipx_metadatamain_packagepackager   r;   install_packagerO   appslenprintr   r$   r%   r   APP_NOT_FOUND_ERROR_MESSAGEformatjoinVENV_EXPIRED_FILENAMEtouchrP   )r@   rC   r   rR   r,   r-   r.   r/   r1   r0   rA   rX   override_sharedrm   all_appss    `             r(   rQ   rQ      s    9D""H"F&&..:))66>>-nfahi"e+OY/:!%"   <<**!!..33 3t9>q'C&sgVL3CDEw"%d|.|.>oNO"jeijH+22!-&mmH5 3 
 #  	)	)002LLH-r*   r?   c                    [         R                  " 5       nUR                  SR                  U 5      R	                  5       5        UR                  UR	                  5       5        UR                  SR                  U5      R	                  5       5        UR                  SR                  U5      R	                  5       5        UR                  5       SS n[        [        R                  R                  5      U-  $ )zComputes deterministic path using hashing function on arguments relevant
to virtual environment's end state. Arguments used should result in idempotent
virtual environment. (i.e. args passed to app aren't relevant, but args
passed to venv creation are.)
 N   )
hashlibsha256updaterr   encode	hexdigestr   r   ctx
venv_cache)r?   r-   r.   r/   mvenv_folder_names         r(   r7   r7     s     	AHHRWW\"))+,HHV]]_HHRWWX%%'(HHRWWY&&(){{}Sb)		$$%(888r*   c                    U R                  5       R                  n[        R                  " [        R                  R                  5       R                  5       5      nX!-
  nS[        -  nX4:  =(       d    U [        -  R                  5       $ )NiQ )
statst_ctimetimemktimedatetimenow	timetupler   rs   r9   )r@   created_time_seccurrent_time_secageexpiration_threshold_secs        r(   _is_temporary_venv_expiredr   (  sl    }}//{{8#4#4#8#8#:#D#D#FG

-C+.QQ)Xh9N.N-V-V-XXr*   rA   rN   c                     U R                   nU(       d<  Ub  UR                  5       (       a$  [        R                  SU< 35        [	        U5        [        5         g )NzRemoving cached venv )rootr9   r$   r%   r   _remove_all_expired_venvs)rA   rN   r1   r@   s       r(   r8   r8   0  s@    yyH(*hoo.?.?+H<89hr*   c                      [        [        R                  R                  5      R	                  5        H9  n [        U 5      (       d  M  [        R                  SU < 35        [        U 5        M;     g )NzRemoving expired venv )	r   r   r   r   iterdirr   r$   r%   r   )r@   s    r(   r   r   8  sJ    --.668%h//KK0=>(O 9r*   urlc                 <    [         R                  R                  U 5      nUR                  R	                  5       =(       d    SnUR                  5       R                  U5      $ ! [         a.  n[        R                  SSS9  [        [        U5      5      UeS nAff = f)Nutf-8zUncaught Exception:T)exc_info)r   requesturlopenheadersget_content_charsetreaddecode	Exceptionr$   debugr   str)r   rescharsetes       r(   r&   r&   ?  s{    'nn$$S)++113>wxxz  )) '*T:AQ&'s   A A# #
B-)BBzG(?m)^# /// (?P<type>[a-zA-Z0-9-]+)$\s(?P<content>(^#(| .*)$\s)+)^# ///$c                    [        U [        5      (       a  U R                  SS9n SnU R                  SS5      n [        R                  U 5       Vs/ s H  o"R                  S5      U:X  d  M  UPM     nnU(       ds  [        R                  U 5       Vs/ s H  o"R                  S5      S:X  d  M  UPM     nnU(       a0  [        R                  [        S[         S	3S
S95        [        S5      eg[        U5      S:  a  [        SU S35      eSR                  S US   R                  S5      R                  SS9 5       5      n [        R                   " U 5      n/ nUR#                  S/ 5       H)  n [%        U5      nUR+                  [-        U5      5        M+     U$ s  snf s  snf ! [&         a  n	[)        SU SU	 35      U	eSn	A	ff = f)z"
Supports inline script metadata.
r   )encodingscriptz

type	pyprojectz
                    a
    Using old form of requirements table. Use updated PEP
                    723 syntax by replacing `# /// pyproject` with `# /// script`
                    and `run.dependencies` (or `run.requirements`) with
                    `dependencies`.
                    rF   rG   zOld 'pyproject' table foundNr_   z	Multiple z blocks foundrx   c              3   `   #    U  H$  oR                  S 5      (       a  USS OUSS v   M&     g7f)z#    Nr_   )
startswith)rc   lines     r(   re   0_get_requirements_from_script.<locals>.<genexpr>p  s1      DyDOOD))QRtABx7Dys   ,.r   r+   T)keependsdependencieszInvalid requirement z: )r>   r   	read_textreplaceINLINE_SCRIPT_METADATAfinditergroupr$   errorr   r   
ValueErrorrn   rr   
splitlinestomllibloadsgetr
   r	   r   appendr   )
r+   rW   r   matchespyproject_matchesr   r?   requirementreqr   s
             r(   r6   r6   M  s   
 '4  ##W#5D oofd+G099'B^BQggfoY]F]qBG^(>(G(G(Ps(P1T[T[\bTcgrTrQ(PsLLH  '.
 :;;
7|a9TF-899gg DKAJDTDTU^D_DjDjtxDjDy G g&IL }}^R8	Nk*C
 	CH% 9 O _ t< " 	N2;-r!EFAM	Ns0   F,FF!.F!1F&&
G0GG)r   N)>r   rz   loggingresysr   urllib.parser   urllib.requestpathlibr   shutilr   typingr   r   r   r   packaging.requirementsr	   r
   pipxr   pipx.commands.commonr   pipx.constantsr   r   pipx.emojisr   	pipx.utilr   r   r   r   r   r   	pipx.venvr   version_infotomlir   	getLogger__name__r$   rs   rp   r   boolr)   rB   rT   rY   rQ   r7   r   r8   r   r&   compiler   r6   rb   r*   r(   <module>r      s8      	 
      2 2 B  7 G   g			8	$ ,  c D XeCI>N5O 8#:39#:3i#: #: 3i	#:
 Cy#: #: #: #:L?
	?
?
 3i?
 	?

 3i?
 Cy?
 ?
 ?
 ?
 ?
D'
	'

'
 '
 3i	'

 '
 3i'
 Cy'
 '
 '
 '
 '
T;.;.;. 
;. 	;.
 3i;. ;. 3i;. Cy;. ;. ;. ;.|949 9c 9TRUY 9cghkcl 9qu 9Y Y$ Y d  htn    RV  '3 '3 ' $no 45d+; 4c@S 4r*   