
    ͈2g#                     ~   d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZmZmZmZmZ d	d
lmZmZmZmZmZmZmZ  ee      Z G d d      Z G d d      Z ejB                  fde"de"fdZ# ejH                   e	e%      jL                  d   dz  dz  jO                               d   d   Z(y)
    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slugifyc            	           e Zd ZeedfdedededefdZdee	   fdZ
dee	   fd	ZddedededefdZedeeef   fd       Zdeeef   fdZede	fd       Zde	defdZdde	fdZdeej0                     fdZy
)Menuusernameprefixbase_prefixmodec                    |dv sJ d| d       || _         || _        t        |      | _        t        |      | _        | j                  j                  | j                        rd| _        y | j                  j                  | _        y )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.12/site-packages/menuinst/platforms/base.py__init__zMenu.__init__   sx     ))TU4&8S+TT)		6l,;; 0 01"DM KK,,DM    returnc                     t         NNotImplementedErrorr#   s    r$   createzMenu.create.       !!r&   c                     t         r)   r*   r,   s    r$   removezMenu.remove1   r.   r&   Nvalueslugextrac                     t        |d      s|S |ri | j                  |}n| j                  }|j                         D ]  \  }}|j                  d|z   dz   |      } |rt	        |      }|S )Nreplacez{{ z }})hasattrplaceholdersitemsr5   r   )r#   r1   r2   r3   r7   placeholderreplacements          r$   renderzMenu.render4   sw    ui(L9d//959L,,L(4(:(:(<$KMM%+"5"={KE )=ENEr&   c                    t        | j                        | j                  j                  t        | j                  dz  dz        t        | j                        | j                  t        | j                  dz  dz        t        | j                  dz        t        | j                  dz        dt
        j                  j                  d      dd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$   r7   zMenu.placeholdersA   s     t//0!%!1!1!6!6t//%7(BC$++&$++-89DKK&014;;./GG&&s+
 	
r&   c                 f   | j                   dz  | j                   dz  t        t        j                  j	                  dd            | j                   dz  dz  | j                   dz  dz  t        t        j                  j	                  dd            | j                   dz  d	z  | j                   dz  d	z  fS )
N
_conda.exe	conda.exe	CONDA_EXEz /oops/a_file_that_does_not_existcondabincondar=   	MAMBA_EXE
micromamba)r   r   rM   environgetr,   s    r$   _conda_exe_path_candidateszMenu._conda_exe_path_candidatesW   s    |+{*-OPQz)G3u$w.-OPQz)L8u$|3	
 		
r&   c                     t         j                  j                  d      rt        t         j                        S | j	                         D ]  }|j                         s|c S  t        d      S )NrR   rU   )sys
executableendswithr   rZ   is_file)r#   rN   s     r$   	conda_exezMenu.conda_exec   sP    >>"";/''335D||~ 6 G}r&   exec                 v    d|j                   v ry|j                   dv rt        t        |      dgd      }d|v S y)NrW   T)rR   rQ   info)universal_newlineszmicromamba versionF)r   r   rL   )r#   ra   outs      r$   _is_micromambazMenu._is_micromambao   sA    388#8822C&1dKC'3..r&   c                     t         j                  dk(  rt        || j                  }t	        |      dz  }t        d |j                  d      D        |dz        }|dz  S )zJ
        Locate the python site-packages location on unix systems
        ntlibc              3   B   K   | ]  }|j                         s|  y wr)   )is_dir).0ps     r$   	<genexpr>z&Menu._site_packages.<locals>.<genexpr>   s     H&9QXXZ1&9s   zpython*z	pythonN.Azsite-packages)rM   r   r+   r   r   nextglob)r#   r   ri   
lib_pythons       r$   _site_packageszMenu._site_packagesw   s]     77d?%%>[[F6lU"Hchhy&9H#P[J[\
O++r&   c                     t         )z|
        This method should return the paths created by the menu
        so they can be removed upon uninstallation
        r*   r,   s    r$   _pathszMenu._paths   
    
 "!r&   FNr)   )__name__
__module____qualname__r   r   rL   r   r%   r   r   r-   r0   r	   boolr
   r;   propertyr7   rZ   r`   rf   rr   r   rM   PathLikert    r&   r$   r   r      s     %.$-- - 	-
 -$"T
 ""T
 "C t D C  
d38n 
 
*

DcN 

 	4 	 	$ 4 
,T 
,"- "r&   r   c            
       n   e Zd ZdedefdZedefd       Zde	e   fdZ
de	e   fdZedeeef   fd       Z	 dd
ededeeeef      defdZ	 ddededeeeef      defdZd Zdeej.                     fdZedefd       Zeej8                  fdededefd       Zej8                  fdedefdZy	)MenuItemmenumetadatac                    || _         | j                  |      | _        | j                  | j                        | _        t        | j                  d   t              r| j                   j                  j                  | j                   j                        r | j                  d   j                  dd      }n| j                  d   j                  dd      }|st        d      || j                  d<   y y )Nr   target_environment_is_base target_environment_is_not_basez3Cannot parse `name` from dictionary representation.)r   _initialize_on_defaults_data_flatten_for_platformr   
isinstancedictr   r!   r   rY   
ValueError)r#   r   r   r   s       r$   r%   zMenuItem.__init__   s    	11(;
224::>dmmF+T2yy(()>)>?}}V,001MrR}}V,001QSUV !VWW$(DMM&! 3r&   r'   c                     t         )zPPath to the main menu item artifact (file or directory, depends on the platform)r*   r,   s    r$   locationzMenuItem.location   s
     "!r&   c                     t         r)   r*   r,   s    r$   r-   zMenuItem.create   r.   r&   c                     t         r)   r*   r,   s    r$   r0   zMenuItem.remove   r.   r&   c                 0    dt        | j                        iS )NMENU_ITEM_LOCATION)rL   r   r,   s    r$   r7   zMenuItem.placeholders   s     !#dmm"4
 	
r&   Nkeyr2   r3   c                 `    | j                   j                  |      }| j                  |||      S )Nr2   r3   )r   rY   r;   )r#   r   r2   r3   r1   s        r$   
render_keyzMenuItem.render_key   s-     !!#&{{5t5{99r&   r1   c           
         |dv r|S |||n| j                   d}t        |t              r | j                  j                  |fi |S t        |d      r?|j                         D ci c]#  \  }}| | j                  j                  |fi |% c}}S |D cg c]  } | j                  j                  |fi |! c}S c c}}w c c}w )N)NTFr   r8   )r7   r   rL   r   r;   r6   r8   )r#   r1   r2   r3   kwargsr   items          r$   r;   zMenuItem.render   s     ''L#/UT5F5F
 eS!#499##E4V445'"MR[[][]zsEC)))%:6::][[=BCUT 		  00UCC \Cs   &(B=$Cc                    t         j                  dk(  rt        | j                  d      }|syt	        dd      5 }|j                  |       ddd       |j                  d      r.t        j                  j                  d       |j                  g}nd	j                  g}t        |d
       t        j                  |j                         y# 1 sw Y   xY w)zE
        Logic to run before the shortcut files are created.
        rh   	precreateNFw)deleter   z#!i  bashT)check)
rM   r   r+   r   r   write
startswithchmodr   unlink)r#   precreate_codetmpcmds       r$   
_precreatezMenuItem._precreate   s     77d?%%5u373IIn% 8$$T*HHSXXu%88*C388$C3d#
		#(( 87s   CCc                     t         )z|
        This method should return the paths created by the item
        so they can be removed upon uninstallation
        r*   r,   s    r$   rt   zMenuItem._paths   ru   r&   c                     t        t        d            5 }t        j                  |      d   d   }d d d        t	        |       S # 1 sw Y   xY w)Nmenuinst.default.json
menu_itemsr   )openr   jsonloadr   )datafdefaultss      r$   r   z MenuItem._initialize_on_defaults   sF    )345yy|L1!4H 6 8T** 65s   AAr   platformc                 l   t        |       }|j                  di       }|j                  t        |      d      }|rB|j                         D ].  \  }}||vr|||<   |t        j                  d||       |||<   0 n||d<   | d   j                         D cg c]
  \  }}|	| c}}|d<   |S c c}}w )zN
        Merge platform keys with global keys, overwriting if needed.
        	platformsNz+Platform value %s=%s overrides global value)r   popplatform_keyr8   logdebug)r   r   	flattenedall_platformsthis_platformr   r1   s          r$   r   zMenuItem._flatten_for_platform   s    
 TN	!k26%)),x*@$G+113
Ui'%*IcN& IIKSRWX%*IcN 4 &3Ik"
 #'{"3"9"9";"
";JCu?PC";"
	+ "
s   
B0#B0c                 T    | j                   d   j                  t        |            d uS )Nr   )r   rY   r   )r#   r   s     r$   enabled_for_platformzMenuItem.enabled_for_platform   s&    zz+&**<+AB$NNr&   rv   ) rw   rx   ry   r   r   r%   r{   r   r   r   r-   r0   r
   rL   r7   rz   r   r	   r   r;   r   r   rM   r|   rt   staticmethodr   r\   r   r   r   r   r}   r&   r$   r   r      sn   )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r&   r   r   r'   c                 \    | dk(  ry| dk(  ry| j                  d      ryt        d|  d      )Nwin32windarwinosxlinuxz	Platform z is not supported)r   r   )r   s    r$   r   r     s>    787#
y
*;<
==r&      r   r   r   ))__doc__r   rM   r\   copyr   loggingr   pathlibr   
subprocessr   tempfiler   typingr	   r
   r   r   r   r   utilsr   r   r   r   r   r   r   rw   r   r   r   r   rL   r   loads__file__parents	read_textmenuitem_defaultsr}   r&   r$   <module>r      s     	 
    # ' ? ?   m" m"`sO sOl "% >3 ># > DJJ	(^A'*AALLN r&   