
    
\h#                        S 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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!\RD                  4S\#S\#4S jjr$\RJ                  " \	" \&5      RN                  S   S-  S\ S3-  RQ                  5       5      S   S   r)g)     N)deepcopy)	getLogger)Path)check_output)NamedTemporaryFile)AnyDictIterableListMappingOptional   )DEFAULT_BASE_PREFIXDEFAULT_PREFIX_UserOrSystem	data_pathdeep_update
logged_runslugifyz1-1-0c            	          \ rS rSr\\S4S\S\S\S\4S jjrS\	\
   4S	 jrS\	\
   4S
 jrSS\S\S\S\4S jjr\S\\\4   4S j5       rS\\\4   4S jr\S\
4S j5       rS\
S\4S jrSS\
4S jjrS\\R2                     4S jrSrg)Menu   usernameprefixbase_prefixmodec                    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)r   r   r   r   r   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    returnc                     [         eNNotImplementedErrorr$   s    r%   createMenu.create.       !!r(   c                     [         er+   r,   r.   s    r%   removeMenu.remove1   r1   r(   Nvalueslugextrac                     [        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itemsr9   r   )r$   r5   r6   r7   r;   placeholderreplacements          r%   renderMenu.render4   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%   r;   Menu.placeholdersA   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condarB   	MAMBA_EXE
micromamba)r   r   rR   environgetr.   s    r%   _conda_exe_path_candidatesMenu._conda_exe_path_candidatesW   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      $ )NrX   r[   )sys
executableendswithr   r`   is_file)r$   rS   s     r%   	conda_exeMenu.conda_exec   sU    >>"";//''335D||~~ 6 G}r(   exec                 z    SUR                   ;   a  gUR                   S;   a  [        [        U5      S/SS9nSU;   $ g)Nr]   T)rX   rW   info)universal_newlineszmicromamba versionF)r   r   rQ   )r$   ri   outs      r%   _is_micromambaMenu._is_micromambao   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)rR   r   r-   r   r   nextglob)r$   r   rr   
lib_pythons       r%   _site_packagesMenu._site_packagesw   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   FNr+   )__name__
__module____qualname____firstlineno__r   r   rQ   r   r&   r   r   r/   r3   r	   boolr
   r?   propertyr;   r`   rg   rn   r|   r   rR   PathLiker   __static_attributes__ r(   r%   r   r      s     %.$-- - 	-
 -$"T
 ""T
 "C t D C  
d38n 
 
*

DcN 

 	4 	 	$ 4 
,T 
,"- "r(   r   c            
          \ rS rSrS\S\4S jr\S\4S j5       r	S\
\   4S jrS\
\   4S jr\S\\\4   4S	 j5       r SS\S\S\\\\4      S\4S jjr SS\S\S\\\\4      S\4S jjrS rS\\R0                     4S jr\S\4S j5       r\\R:                  4S\S\S\4S jj5       r\R:                  4S\S\4S jjr Sr!g
)MenuItem   menumetadatac                    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.)r   _initialize_on_defaults_data_flatten_for_platformr   
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(   r)   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   r1   r(   c                     [         er+   r,   r.   s    r%   r3   MenuItem.remove   r1   r(   c                 0    S[        U R                  5      0$ )NMENU_ITEM_LOCATION)rQ   r   r.   s    r%   r;   MenuItem.placeholders   s     !#dmm"4
 	
r(   Nkeyr6   r7   c                 X    U R                   R                  U5      nU R                  XBUS9$ )Nr6   r7   )r   r_   r?   )r$   r   r6   r7   r5   s        r%   
render_keyMenuItem.render_key   s+     !!#&{{55{99r(   r5   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   r<   )r;   r   rQ   r   r?   r:   r<   )r$   r5   r6   r7   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.
rq   	precreateNFw)deleter   z#!i  bashT)check)
rR   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        [        WU 5      $ ! , (       d  f       N= f)N	menuinst-.default.json
menu_itemsr   )openr   SCHEMA_VERSIONjsonloadr   )datafdefaultss      r%   r    MenuItem._initialize_on_defaults   sQ    )i'7}EFG1yy|L1!4H H 8T** HGs   A
Ar   platformc                    [        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.
	platformsNz+Platform value %s=%s overrides global value)r   popplatform_keyr<   logdebug)r   r   	flattenedall_platformsthis_platformr   r5   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   r   r   r   r   r&   r   r   r   r   r/   r3   r
   rQ   r;   r   r   r	   r   r?   r   r   rR   r   r   staticmethodr   rc   r   r   r   r   r   r   r(   r%   r   r      st   )T )T ) "$ " ""T
 ""T
 " 
d38n 
 
 OS::":3;DcN3K:	: QUDD $D5=d38n5MD	D("- " + + + =@\\ G s g  6 47<< OS OD O Or(   r   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   )*__doc__r   rR   rc   copyr   loggingr   pathlibr   
subprocessr   tempfiler   typingr	   r
   r   r   r   r   utilsr   r   r   r   r   r   r   r   r   r   r   r   r   rQ   r   loads__file__parents	read_textmenuitem_defaultsr   r(   r%   <module>r      s      	 
    # ' ? ?   m" m"`sO sOl "% >3 ># > JJ	(^A'In5E]*SS^^` r(   