
    9i%                       S r SSKJ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  SSKJr  SSKJr  SS	KJrJrJr  S
SKJrJrJrJrJrJrJr  \	" \5      rSr " S S5      r " S S5      r \RB                  4SS jjr"\RF                  " \" \$5      RJ                  S   S-  S\ S3-  RM                  5       5      S   S   r'g)     )annotationsN)deepcopy)	getLogger)Path)check_output)NamedTemporaryFile)AnyIterableMapping   )DEFAULT_BASE_PREFIXDEFAULT_PREFIX_UserOrSystem	data_pathdeep_update
logged_runslugifyz1-1-3c                      \ rS rSr\\S4       SS jjrSS jrSS jrSSS jjr	\
SS j5       rSS	 jr\
SS
 j5       rSS jrSSS jjrSS jrSrg)Menu   userc                   US;   d   SU S35       eX@l         Xl        [        U5      U l        [        U5      U l        U R                  R                  U R                  5      (       a  SU l        g U R                  R                  U l        g )N)r   systemzmode=z must be `user` or `system`base)modenamer   prefixbase_prefixsamefileenv_name)selfr   r   r   r   s        7lib/python3.13/site-packages/menuinst/platforms/base.py__init__Menu.__init__   sw     ))TU4&8S+TT)		6l,;; 0 011"DM KK,,DM    c                    [         eNNotImplementedErrorr"   s    r#   createMenu.create0       !!r&   c                    [         er(   r)   r+   s    r#   removeMenu.remove3   r.   r&   Nc                    [        US5      (       d  U$ U(       a  0 U R                  EUEnOU R                  nUR                  5        H  u  pVUR                  SU-   S-   U5      nM     U(       a  [	        U5      nU$ )Nreplacez{{ z }})hasattrplaceholdersitemsr3   r   )r"   valueslugextrar5   placeholderreplacements          r#   renderMenu.render6   sx    ui((L9d//959L,,L(4(:(:(<$KMM%+"5"={KE )=ENEr&   c                   [        U R                  5      U R                  R                  [        U R                  S-  S-  5      [        U R                  5      U R                  [        U R                  S-  S-  5      [        U R                  S-  5      [        U R                  S-  5      S[
        R                  R                  S5      SS.$ )z
Additional placeholders added at runtime:
- MENU_ITEM_LOCATION -> *MenuItem().location

Subclasses may extend this dictionary!
binpythonr   zN.A~png)BASE_PREFIXDISTRIBUTION_NAMEBASE_PYTHONPREFIXENV_NAMEPYTHONMENU_DIRBIN_DIRPY_VERHOMEICON_EXT)strr   r   r   r!   ospath
expanduserr+   s    r#   r5   Menu.placeholdersC   s     t//0!%!1!1!6!6t//%7(BC$++&$++-89DKK&014;;./GG&&s+
 	
r&   c                f   U R                   S-  U R                   S-  [        [        R                  R	                  SS5      5      U R                   S-  S-  U R                   S-  S-  [        [        R                  R	                  SS5      5      U R                   S-  S	-  U R                   S-  S	-  4$ )
N
_conda.exe	conda.exe	CONDA_EXEz /oops/a_file_that_does_not_existcondabincondar?   	MAMBA_EXE
micromamba)r   r   rO   environgetr+   s    r#   _conda_exe_path_candidatesMenu._conda_exe_path_candidatesY   s    |+{*-OPQz)G3u$w.-OPQz)L8u$|3	
 		
r&   c                    [         R                  R                  S5      (       a  [        [         R                  5      $ U R	                  5        H  nUR                  5       (       d  M  Us  $    [        S5      $ )NrU   rX   )sys
executableendswithr   r]   is_file)r"   rP   s     r#   	conda_exeMenu.conda_exee   sU    >>"";//''335D||~~ 6 G}r&   c                z    SUR                   ;   a  gUR                   S;   a  [        [        U5      S/SS9nSU;   $ g)NrZ   T)rU   rT   info)universal_newlineszmicromamba versionF)r   r   rN   )r"   exeouts      r#   _is_micromambaMenu._is_micromambaq   sA    388#8822C&1dKC'3..r&   c                    [         R                  S:X  a  [        eUc  U R                  n[	        U5      S-  n[        S UR                  S5       5       US-  5      nUS-  $ )z:
Locate the python site-packages location on unix systems
ntlibc              3  R   #    U  H  oR                  5       (       d  M  Uv   M     g 7fr(   )is_dir).0ps     r#   	<genexpr>&Menu._site_packages.<locals>.<genexpr>   s     H&9XXZ11&9s   '	'zpython*z	pythonN.Azsite-packages)rO   r   r*   r   r   nextglob)r"   r   ro   
lib_pythons       r#   _site_packagesMenu._site_packagesy   s]     77d?%%>[[F6lU"Hchhy&9H#P[J[\
O++r&   c                    [         e)zd
This method should return the paths created by the menu
so they can be removed upon uninstallation
r)   r+   s    r#   _pathsMenu._paths   
    
 "!r&   )r   r!   r   r   r   )r   rN   r   rN   r   rN   r   r   )returnztuple[os.PathLike]FN)r7   r
   r8   boolr9   zdict | Noner   r
   r   zdict[str, str])r   ztuple[Path, ...]r   r   )ri   r   r   r   r(   )r   zPath | str | Noner   r   r   zIterable[os.PathLike])__name__
__module____qualname____firstlineno__r   r   r$   r,   r0   r<   propertyr5   r]   rd   rk   ry   r|   __static_attributes__ r&   r#   r   r      s     %.$-- - 	-
 -$"" 
 
*

 	 	
,"r&   r   c                      \ rS rSrSS jr\SS j5       rSS jrSS jr\SS j5       r	SSS jjr
SSS	 jjrS
 rSS jr\SS j5       r\\R"                  4     SS jj5       r\R"                  4SS jjrSrg)MenuItem   c                   Xl         U R                  U5      U l        U R                  U R                  5      U l        [        U R                  S   [        5      (       a  U R                   R                  R                  U R                   R                  5      (       a   U R                  S   R                  SS5      nOU R                  S   R                  SS5      nU(       d  [        S5      eX0R                  S'   g g )Nr   target_environment_is_baser   target_environment_is_not_basez3Cannot parse `name` from dictionary representation.)menu_initialize_on_defaults_data_flatten_for_platformmetadata
isinstancedictr   r    r   r\   
ValueError)r"   r   r   r   s       r#   r$   MenuItem.__init__   s    	11(;
224::>dmmF+T22yy(()>)>??}}V,001MrR}}V,001QSUV !VWW$(MM&! 3r&   c                    [         e)zPPath to the main menu item artifact (file or directory, depends on the platform)r)   r+   s    r#   locationMenuItem.location   s
     "!r&   c                    [         er(   r)   r+   s    r#   r,   MenuItem.create   r.   r&   c                    [         er(   r)   r+   s    r#   r0   MenuItem.remove   r.   r&   c                0    S[        U R                  5      0$ )NMENU_ITEM_LOCATION)rN   r   r+   s    r#   r5   MenuItem.placeholders   s     !#dmm"4
 	
r&   Nc                X    U R                   R                  U5      nU R                  XBUS9$ )Nr8   r9   )r   r\   r<   )r"   keyr8   r9   r7   s        r#   
render_keyMenuItem.render_key   s)    !!#&{{55{99r&   c           
        US;   a  U$ UUb  UOU R                   S.n[        U[        5      (       a  U R                  R                  " U40 UD6$ [        US5      (       a@  UR                  5        VVs0 s H"  u  pQXPR                  R                  " U40 UD6_M$     snn$ U Vs/ s H  o`R                  R                  " U40 UD6PM!     sn$ s  snnf s  snf )N)NTFr   r6   )r5   r   rN   r   r<   r4   r6   )r"   r7   r8   r9   kwargsr   items          r#   r<   MenuItem.render   s    ''L#/UT5F5F
 eS!!99##E4V445'""MR[[][]zsC))%:6::][[=BCUT		  00UCC \Cs   3)C$&Cc                   [         R                  S:X  a  [        eU R                  S5      nU(       d  g[	        SSS9 nUR                  U5        SSS5        UR                  S5      (       a/  [         R                  " WR                  S5        UR                  /nOS	WR                  /n[        US
S9  [         R                  " UR                  5        g! , (       d  f       N= f)z5
Logic to run before the shortcut files are created.
rn   	precreateNFw)deleter   z#!i  bashT)check)
rO   r   r*   r   r	   write
startswithchmodr   unlink)r"   precreate_codetmpcmds       r#   
_precreateMenuItem._precreate   s     77d?%%5u373IIn% 8$$T**HHSXXu%88*C388$C3d#
		#(( 87s   C
C$c                    [         e)zd
This method should return the paths created by the item
so they can be removed upon uninstallation
r)   r+   s    r#   r|   MenuItem._paths   r~   r&   c                   [        [        S[         S35      5       n[        R                  " U5      S   S   nS S S 5        [        U R                  5       5      n[        WU 5      n U R                  S0 5      R                  5        VVs0 s H.  u  pEUR                  S0 5      R                  U5      S;  d  M,  XE_M0     snnU S'   U $ ! , (       d  f       N= fs  snnf )N	menuinst-.default.json
menu_itemsr   	platforms)NF)
openr   SCHEMA_VERSIONjsonloadr   copyr   r\   r6   )datafdefaultsoriginalplatformr7   s         r#   r    MenuItem._initialize_on_defaults   s    )i'7}EFG1yy|L1!4H HDIIK(8T* $(88K#<#B#B#D
#D||K,00:-O HO#D
[
  HG

s   C
+C9C
Cc                   [        U 5      nUR                  S0 5      nUR                  [        U5      S5      nU(       aD  UR                  5        H/  u  pVXR;  a  XbU'   M  Uc  M  [        R                  SXV5        XbU'   M1     OX2S'   U S   R                  5        VVs/ s H  u  pVUc  M
  UPM     snnUS'   U$ s  snnf )z>
Merge platform keys with global keys, overwriting if needed.
r   Nz+Platform value %s=%s overrides global value)r   popplatform_keyr6   logdebug)r   r   	flattenedall_platformsthis_platformr   r7   s          r#   r   MenuItem._flatten_for_platform   s     TN	!k26%)),x*@$G+113
'%*cN& IIKSX%*cN 4 &3k"
 #'{"3"9"9";"
";JCuC";"
	+ "
s   	B:+B:c                T    U R                   S   R                  [        U5      5      S L$ )Nr   )r   r\   r   )r"   r   s     r#   enabled_for_platformMenuItem.enabled_for_platform  s&    zz+&**<+AB$NNr&   )r   r   r   )r   r   r   Mapping[str, Any]r   r   r   r   )r   rN   r8   r   r9   dict[str, str] | Noner   r
   )r7   r
   r8   r   r9   r   r   r
   )r   r   )r   r   r   rN   r   r   )r   rN   r   r   )r   r   r   r   r$   r   r   r,   r0   r5   r   r<   r   r|   staticmethodr   r`   r   r   r   r   r   r&   r#   r   r      s    ) " """ 
 

:D("   14+.	 : 47<< O Or&   r   c                j    U S:X  a  gU S:X  a  gU R                  S5      (       a  g[        SU  S35      e)Nwin32windarwinosxlinuxz	Platform z is not supported)r   r   )r   s    r#   r   r     sA    787##
y
*;<
==r&      r   r   r   r   )r   rN   r   rN   )(__doc__
__future__r   r   rO   r`   r   r   loggingr   pathlibr   
subprocessr   tempfiler	   typingr
   r   r   utilsr   r   r   r   r   r   r   r   r   r   r   r   r   r   loads__file__parents	read_textmenuitem_defaultsr   r&   r#   <module>r      s     "  	 
    # ' ) )   m" m"`xO xOv "% > JJ	(^A'In5E]*SS^^` r&   