
    9fv$              	          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  S S	KJrJr  \ R2                  " \5      rS
r\" SS9 " S S5      5       rS\S\\\4   4S jrS\S\\\ 4   4S jr!S\S\4S jr"S#S\S\ S\4S jjr#S\S\ S\4S jr$S\S\	\   S\\\	\   4   4S jr%S\S\4S jr&S\S\4S jr'S\S\\   4S jr(S\S\
\   4S jr)S \S!\S\4S" jr*g)$    N)	dataclass)Path)ListOptionalSetTuple)InvalidRequirementRequirement)SpecifierSet)canonicalize_name)hazard)	PipxError	pipx_wrap)z.whlz.tar.gzz.zipT)frozenc                   F    \ rS rSr% \\   \S'   \\   \S'   \\   \S'   Srg)ParsedPackage   valid_pep508	valid_urlvalid_local_path N)	__name__
__module____qualname____firstlineno__r   r
   __annotations__str__static_attributes__r       8/usr/lib/python3/dist-packages/pipx/package_specifier.pyr   r      s!    ;''}sm#r   r   package_specreturnc                     [         R                  " SU 5      nU(       a"  UR                  S5      UR                  S5      4$ U S4$ )zReturns (path, extras_string)z(.+)(\[.+\])       )researchgroup)r!   package_spec_extras_res     r    _split_path_extrasr+   #   sC    YYE&,,Q/1G1M1Ma1PQQb!!r   package_pathc                 >    [        U 5      nUR                  5       nX4$ N)r   exists)r,   pkg_pathpkg_path_existss      r    _check_package_pathr2   ,   s!    L!Hoo'O&&r   c                    SnSnSn [        U 5      nUnU(       aj  WR                  R                  [        5      (       aF  [        UR                  5      u  pVU(       a  [        UR                  5       5      nO[        U S35      eU(       dC  [        R                  R                  U 5      nUR                  (       a  UR                  (       a  U nU(       dD  U(       d=  [        U 5      u  p[        U5      u  pVU(       a  [        UR                  5       5      U	-   nU(       d  U(       d  U(       d  [        SU  35      eU(       a	  U(       a  Sn[        UUUS9$ ! [         a     GNQf = f)z,Parse package_spec as would be given to pipxNz does not existzUnable to parse package spec: )r   r   r   )r
   r	   nameendswithARCHIVE_EXTENSIONSr2   r   resolver   urllibparseurlsplitschemenetlocr+   r   )
r!   r   r   r   package_reqr,   package_path_exists
parsed_urlpackage_path_strpackage_extras_strs
             r    _parse_specifierrB   3   sB    LI#!,/ #((112DEE.A+BRBR.S+"<#7#7#9:|nO<== \\**<8
!2!2$I 	1CL1Q.	.ABR.S+"<#7#7#9:=OO	2B8GHH( !) M  s   E 
E'&E'requirementremove_version_specifiersc                     S U l         [        U R                  5      U l        U(       a  [        S5      U l        [        U 5      $ )Nr&   )markerr   r4   r   	specifierr   )rC   rD   s     r    package_or_url_from_pep508rH   l   s8    K()9)9:K  ,R 0{r   parsed_packagec           	         U R                   bh  U R                   R                  b<  [        R                  [	        S[
         SU R                   R                   S3SS95        [        U R                   US9nO3U R                  b  U R                  nOU R                  b  U R                  n[        R                  SW 35        U$ )Nz
                    z4  Ignoring environment markers
                    (z) in package
                    specification. Use pipx options to specify this type of
                    information.
                        subsequent_indentrD   zcleaned package spec: )
r   rF   loggerwarningr   r   rH   r   r   info)rI   rD   package_or_urls      r    !_parsed_package_to_package_or_urlrS   t   s    "".&&--9NNH $11889 : '.
 4''&?
 
	!	!	-'11		(	(	4'88
KK((89:r   pip_argsc                 r   [        U 5      n[        USS9nSU;   aG  UR                  (       d6  [        R	                  [        S[         S3SS95        UR                  S5        [        U5       H  u  pEUR                  S5      (       d  M  US;   aK  US	-   nU[        U5      :  a6  X   n[        [        U5      R                  5       R                  5       5      X'   OTUR                  S
5      n[        U5      S:X  a4  Uu  p[        U
5      R                  5       R                  5       nU	 S
U 3X'     X14$    X14$ )zReturn package_or_url and pip_args suitable for pip install

Specifically:
* Strip any markers (e.g. python_version > "3.4")
* Ensure --editable is removed for any package_spec not a local path
* Convert local paths to absolute paths
FrN   z
--editable
                z  Ignoring --editable install option. pipx disallows it
                for anything but a local path, to avoid having to create a new
                src/ directory.
                rK   rL   )z-cz--constraintr$   =r%   )rB   rS   r   rO   rP   r   r   remove	enumerate
startswithlenr   r   
expanduserr7   split)r!   rT   rI   rR   indexoptionargument_indexconstraints_fileoption_listkeyvalue
value_paths               r    parse_specifier_for_installrf      sA    &l3N6~afgNx(G(G 
 #*		
 	%"8,  !788++"QYNH-#+#; +.t4D/E/P/P/R/Z/Z/\+]( !,,s+K;1$(
!%[335==?
%(E:,"7##) -( ##r   c                 ,    [        U 5      n[        USS9$ )zReturn package_or_url suitable for pipx metadata

Specifically:
* Strip any markers (e.g. python_version > 3.4)
* Convert local paths to absolute paths
FrN   rB   rS   r!   rI   s     r    parse_specifier_for_metadatarj      s     &l3N,^W\]]r   c                 ,    [        U 5      n[        USS9$ )zReturn package_or_url suitable for pip upgrade

Specifically:
* Strip any version specifiers (e.g. package == 1.5.4)
* Strip any markers (e.g. python_version > 3.4)
* Convert local paths to absolute paths
TrN   rh   ri   s     r    parse_specifier_for_upgraderl      s     &l3N,^W[\\r   c                 (   [        U 5      nUR                  (       a-  UR                  R                  b  UR                  R                  $ UR                  (       a/  [	        UR                  5      u  p#[        SU-   5      R                  $ [        5       $ )Nnotapackage)rB   r   extrasr   r+   r
   set)r!   rI   _rA   s       r    
get_extrasrr      sr    %l3N""~'B'B'I'I'U**111		(	("4^5T5T"U=+==>EEE5Lr   c                      [        U 5      nUR                  (       d$  UR                  R	                  [
        5      (       a  g [        UR                  5      $ ! [         a     g f = fr.   )r
   r	   urlr4   r5   r6   r   )r!   r=   s     r    valid_pypi_nameru      s[    !,/
 +**334FGG [--..  s   A 
A%$A%rR   package_namec                 x    [        U 5      nUR                  R                  [        5      (       a  [        U5      $ [        UR                  5      [        U5      :w  a;  [        R                  [        S[         SUR                  < SU< SU< S3	SS95        Xl        [        U5      $ ! [         a    U s $ f = f)NrV   z9  Name supplied in package specifier was
                z but package found has name z.
                Using z.
                rK   rL   )r
   r	   r4   r5   r6   r   r   rO   rP   r   r   )rR   rv   r=   s      r    fix_package_namerx      s    !.1
   !344;))*.?.MM !!$$@@P Q#& '
 #*		
 ${)  s   B* *B98B9)F)+loggingr'   urllib.parser8   dataclassesr   pathlibr   typingr   r   r   r   packaging.requirementsr	   r
   packaging.specifiersr   packaging.utilsr   pipx.emojisr   	pipx.utilr   r   	getLoggerr   rO   r6   r   r   r+   boolr2   rB   rH   rS   rf   rj   rl   rr   ru   rx   r   r   r    <module>r      s    	  !  - - B - -  *			8	$0  $$ $ $"S "U38_ "'c 'eD$J.? '63 6= 6rK TX eh m `d il 6+$c +$T#Y +$5QTVZ[^V_Q_K` +$\^s ^s ^	]c 	]c 	]S SX /# /(3- / S   r   