
     [1f+                     (   d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZmZ ej*                  j,                  j.                  Zej2                  ge_         G d
 dej6                        Z ej:                  d      Zej?                  ej@                          ejB                         Z"e"j?                  ejF                          e       Z$e$j?                  ej@                         ejK                  e$       ejK                  e"       d Z&ddZ' ejP                         fdZ) ejP                         fdZ* e)e      Z+de+v rejY                  de+       d Z- G d de.      Z/d Z0d Z1 G d de.      Z2y)    )absolute_importunicode_literalsN)existsisdirjoin   )dirs_srcfolder_path)create_shortcut)DEFAULT_BASE_PREFIX   )rm_empty_dirrm_rfc                       e Zd Zd Zy)DbgViewHandlerc                 8    t        | j                  |             y N)OutputDebugStringformat)selfrecords     6lib/python3.12/site-packages/menuinst/_legacy/win32.pyemitzDbgViewHandler.emit   s    $++f-.    N)__name__
__module____qualname__r    r   r   r   r      s    /r   r   menuinst_win32c                 T    | j                  d      } | d   dv r| S d| v sd| v rd| z  S | S )z'
    quotes a string if necessary.
    "r   )- r#   /"%s")strip)ss    r   quotedr(   '   s>    
 	
At|qyDAI{r   c                 D    | r| d   | d   cxk(  r|k(  r| S  n| S || |S )zG

    Examples:
        >>> ensure_pad('conda')
        '_conda_'

    r   r   )namepads     r   
ensure_padr-   6   s7     47d2h-#- .c**r   c                 H    |sd}t        | d      r| j                  |      } | S )Nutf-8decode)hasattrr0   varcodecs     r   
to_unicoder5   D   s'    sHjjJr   c                 l    t        | t              r| S |sd}t        | d      r| j                  |      } | S )Nr/   encode)
isinstancebytesr1   r7   r2   s     r   to_bytesr:   L   s6    #u
sHjjJr   z\envs\z$menuinst called from non-root env %sc                    t         j                  d   }dt        j                  z  }t	        |d         }t	        |d         }t	        |       } t	        |d         }d|fd|fdt
        j                  j                  |      d	   fd
t
        j                  j                  t        |d            j                  dd      fdt        |d      fd|d   fd|d   fd|fdd|z  fdd|z  ff
D ]  \  }}|s	| j                  ||      }  | S )Nr      prefixroot_prefixenv_namez	${PREFIX}z${ROOT_PREFIX}z${DISTRIBUTION_NAME}r*   z${PYTHON_SCRIPTS}Scripts\r$   z${MENU_DIR}Menuz${PERSONALDIR}	documentsz${USERPROFILE}profilez${ENV_NAME}z	${PY_VER}z%dz${PLATFORM}z(%s-bit))sysversion_infotuple__itemsize__r5   ospathsplitnormpathr   replace)	textdirpy_major_ver
py_bitness
env_prefixr>   r?   abs	            r   substitute_env_variablesrU   [   s0    ##A&LU'''JCM*JS/0KdD#j/*H 
z"	K(	 "''--"<R"@A GGT*j9:BB5$O	
 
j'23	C,-	C	N+	"	u-.	z12 &1 <<1%D!&" Kr   c                   .    e Zd ZeddefdZd Zd Zd Zy)rB    Nc                    t        |      | _        t        |      | _        |r|n"t        t	        | j                  d            rdnd}t
        j                  d|d| j                  d|d|d|d	|d
       	 | j                  || j                  |||       y# t        $ rc dt        v rC|dk(  r>t
        j                  d       	 | j                  || j                  |d       Y y#  Y Y yxY wt
        j                  d       Y yw xY w)z
        Prefix is the system prefix to be used -- this is needed since
        there is the possibility of a different Python's packages being managed.
        z	.nonadminusersystemzMenu: name: 'z', prefix: 'z', env_name: 'z
', mode: 'z', used_mode: 'z', root_prefix: ''zMInsufficient permissions to write menu folder.  Falling back to user locationz%Unable to create AllUsers menu folderN)r5   r=   r>   r   r   loggerdebugset_dirWindowsErrorr	   warnfatal)r   r+   r=   r?   moder>   	used_modes          r   __init__zMenu.__init__|   s     !(%k2DT[[,0O)PvV^ 	 	T[[(D)[J	
	FLLt{{HiM 	F
 !i8&;4LLt{{HfEDE	Fs*   ;B +DC''C,)D,DDc                    || _         t               | _        d}t        |   j	                         D ]  \  }}t        |||      | j                  |<   ! || j                  d<   || j                  d<   || j                  d<   t        || j                        }	t        | j                  d   |	      | _        | j                          y )NFr=   r>   r?   start)
rb   dictrO   r	   itemsr
   rU   r   rJ   create)
r   r+   r=   r?   rb   r>   check_other_modekvfolder_names
             r   r^   zMenu.set_dir   s    	6 !TN((* 	ADAq &d,<a@DHHQK	A $"-'.tTXX>'*K8	r   c                 n    t        | j                        s t        j                  | j                         y y r   )r   rJ   rI   mkdirr   s    r   ri   zMenu.create   s#    TYYHHTYY  r   c                 .    t        | j                         y r   )r   rJ   rp   s    r   removezMenu.remove   s    TYYr   )r   r   r   unicode_root_prefixrd   r^   ri   rr   r   r   r   rB   rB   {   s&     #'(FT*  r   rB   c                     	 | j                  |d          	 | j                  |d          y # t        $ r Y !w xY w# t        $ r Y y w xY w)Nscriptargumentscriptarguments)appendKeyErrorextend)argsshortcuts     r   extend_script_argsr|      sW    H-./H./0    s   , ; 	88	AAc           	         t        |       dkD  rd| d   j                         v sd| d   j                         v rt| d   j                         dk(  s| d   j                         dk(  rHt        d | dd  D              r3t        | d   d	      | d   d
dj	                  d | dd  D              z  g} | S | D cg c]  }t        |       } }| S c c}w )Nr   zCMD.EXEr   z	%COMSPEC%r   z/Kz/Cc              3   $   K   | ]  }d |v  
 yw)r#   Nr   .0args     r   	<genexpr>zquote_args.<locals>.<genexpr>   s     /ss
/s   r!   r%   r#   c              3   4   K   | ]  }t        |d         yw)r!   N)r-   r   s     r   r   zquote_args.<locals>.<genexpr>   s     Hz#s3Hs   )lenupperanyr-   r   r(   )rz   r   s     r   
quote_argsr      s    
 	D	A$q'--/)[DGMMO-K!W]]_$Q4(?/d12h// tAw$GchhHtABxHHI
 K (,,s,,K -s   1Cc                        e Zd Zd Zd ZddZy)ShortCutc                      || _         || _        y r   )menur{   )r   r   r{   s      r   rd   zShortCut.__init__   s    	 r   c                 (    | j                  d       y )NT)rr   )ri   rp   s    r   rr   zShortCut.remove   s    4 r   c           
      	   g }dg}| j                   j                  j                  dd      }| j                   j                  j                  dd      }t	        |d      }t	        |d      }t	        |d      }t	        |d      }	|t	        |d      ||g}
|t	        |d      ||	g}d| j
                  v r0|}t        |      g}|| j
                  d   j                         z  }nd| j
                  v r/|
}t        |      g}|| j
                  d   j                         z  }nd	| j
                  v r|d
d	d| j
                  d	   g}nd| j
                  v rR|t	        |d      |g}t        |      g}|| j
                  d   j                         z  }t        || j
                         nZd| j
                  v r4| j
                  d   j                         }t        || j
                         nt        d| j
                  z        |D cg c]"  }t        || j                   j                        $ }}|D ]  }||   j                  dd      ||<    t        |      }|d   }|dd  }t        j                  d|d|       | j
                  j                  dd      }| j
                  j                  dd      }t        || j                   j                        }t        || j                   j                        }|j                  dd      }|j                  dd      }|r!t!        |      st#        j$                  |       nd}| j                   j&                  g}| j
                  j                  d      r(|j)                  | j                   j                  d          | j
                  j                  d      r@d| j                   j                  v r(|j)                  | j                   j                  d          | j                   j                  d   r(dj+                  | j                   j                  d         nd}|D ]  }t        | j
                  d   | j                   j                        }t	        |||z   dz         }|rt-        |       Pt/        d|z   d|z   |z   d|z   dj	                  d |D              d|z   d|z           y c c}w )Nr   r$   rA   z
python.exezpythonw.exezcwp.py	pywscriptpyscript
webbrowserz-mz-tscriptrZ   zNothing to do: %rr   zShortcut cmd is z, args are workdirrW   iconz
%HOMEPATH%desktopquicklaunchr?   z ({})r+   z.lnkr#   c              3       K   | ]  }|  y wr   r   r   s     r   r   z"ShortCut.create.<locals>.<genexpr>B  s     2cc2s   )r   r=   rM   r>   r   r{   r   rK   r|   	ExceptionrU   rO   r   r\   r]   getr   rI   makedirsrJ   rw   r   r   r   )r   rr   rz   fix_win_slashesr=   rs   root_pyroot_pywenv_pyenv_pywcwp_pycwp_pywr   fwscmdr   r   dst_dirsname_suffixdst_dirr+   dsts                         r   ri   zShortCut.create   s-   #!!))#t4"ii33;;CF*M:+^<fm,v~.4 3Y?PT"5yA67S$--'D"4ykODMM+.4466D4==(D"4ykODMM*-3355DT]]*dL$l8STD& T"5yA6JD"4ykODMM(+1133DtT]]3&==*002DtT]]3/$--?@@HLM(diimm<MM" 	5CS	))#t4DI	5 $1gABx#tDE--##Ir2}}  ,*7DIIMMB'diimm< //#t,||C& >G$"G IINN# ==Y'OODIIMM)45 ==]+0NOODIIMM-89 :>z9RGNN499==45XZ 	   	G+DMM&,A499==QDw{ 2V ;<Cc
  #I$J,#III2T22'M$J	Q Ns   >'R<N)F)r   r   r   rd   rr   ri   r   r   r   r   r      s    !![r   r   )_)3
__future__r   r   ctypeslocaleloggingrI   rE   os.pathr   r   r    platforms.win_utils.knownfoldersr	   r
   platforms.win_utils.winshortcutr   utilsr   r   r   windllkernel32OutputDebugStringWr   	c_wchar_pargtypesHandlerr   	getLoggerr\   setLevelDEBUGStreamHandlerstream_handlerWARNINGdbgview
addHandlerr(   r-   getpreferredencodingr5   r:   rs   warningrU   objectrB   r|   r   r   r   r   r   <module>r      sj  
 9    	 
 ' ' D = ' & MM**== $../  /W__ /
 
		+	,  &&&(    (

       '    . !+ 6&557  4335  !!45 %%
NN9;NO@E 6 E P(cv cr   