o
    f                     @  s   d Z ddlmZ ddlZddlZddlZddlmZmZ ee	Z
dd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze	dkr]e  dS dS ) z\Implement https://www.python.org/dev/peps/pep-0514/ to discover interpreters - Windows only.    )annotationsN)basicConfig	getLoggerc                 c  s:    d}	 z	t | |V  W n
 ty   Y d S w |d7 }q)Nr   T   )winregEnumKeyOSError)keyat r   Y/var/www/html/dev/env/lib/python3.10/site-packages/virtualenv/discovery/windows/pep514.py	enum_keys   s   r   c                 C  s(   z	t | |d W S  ty   Y d S w )Nr   )r   QueryValueExr   )r	   
value_namer   r   r   	get_value   s
   r   c                  c  s^    t jddddft jddt jdft jddt jdffD ]\} }}}}t| ||||E d H  qd S )NHKEY_CURRENT_USERzSoftware\Pythonr   @   HKEY_LOCAL_MACHINE    )r   r   r   KEY_WOW64_64KEYKEY_WOW64_32KEYprocess_set)hive	hive_namer	   flagsdefault_archr   r   r   discover_pythons   s   r   c                 c  s    z6t | |dt j|B  }t|D ]}|dkrqt||||E d H  qW d    W d S 1 s0w   Y  W d S  tyA   Y d S w )Nr   
PyLauncher)r   	OpenKeyExKEY_READr   process_companyr   )r   r   r	   r   r   root_keycompanyr   r   r   r   '   s   &r   c                 c  s`    t ||}t|D ]}t| ||||}|d ur|V  qW d    d S 1 s)w   Y  d S N)r   r   r   process_tag)r   r"   r!   r   company_keytagspecr   r   r   r    2   s   "r    c                 C  s   t ||V}t| |||}|d urS|\}}}	t| ||||}
|
d urJt| |||}|d urA|\}}||||
||fW  d    S 	 W d    d S 	 W d    d S 	 W d    d S 1 s_w   Y  d S r#   )r   r   load_version_dataload_arch_dataload_exe)r   r"   r%   r&   r   tag_keyversionmajorminor_archexe_dataexeargsr   r   r   r$   :   s"   

$r$   c           	   	   C  s>  |  d| d| }zt || dn}|Q t|d}|d u r7t|d }|d u r0t|d ntj|d}|d urYtj|rYt|d}||fW  d    W  d    W S t|d|  W d    n1 skw   Y  W d    W d S W d    W d S 1 sw   Y  W d S  ty   t| dd	 Y d S w )
N/z\InstallPathExecutablePathz#no ExecutablePath or default for itz
python.exeExecutableArgumentszcould not load exe with value z/InstallPathmissing)	r   r   r   msgospathjoinexistsr   )	r   r"   r%   r&   key_pathip_keyr2   ipr3   r   r   r   r*   J   s0   


 *r*   c              
   C  sh   t |d}|d ur2|  d| d| d}zt|W S  ty1 } zt|| W Y d }~|S d }~ww |S )NSysArchitecturer4   z/SysArchitecture)r   
parse_arch
ValueErrorr8   )r   r"   r&   r+   r   arch_strr=   sys_archr   r   r   r)   _   s   

r)   c                 C  sR   t | tr td| }|rttt| S d|  }t|d| }t|)Nz
^(\d+)bit$invalid format zarch is not string: )	
isinstancestrrematchintnextitergroupsrB   )rC   rI   errorr   r   r   rA   j   s   


rA   c                 C  s   t |d|  d| d| df||  d| d| ffD ]'\}}|d urCzt|W   S  tyB } zt|| W Y d }~qd }~ww qd S )N
SysVersionr4   z/SysVersion)r   parse_versionrB   r8   )r   r"   r&   r+   	candidater=   sys_versionr   r   r   r(   u   s   r(   c                 C  sT   t | tr!td| }|rtdd | D S d|  }t|d| }t|)Nz^(\d+)(?:\.(\d+))?(?:\.(\d+))?$c                 s  s$    | ]}|d urt |nd V  qd S r#   )rJ   ).0ir   r   r   	<genexpr>   s   " z parse_version.<locals>.<genexpr>rE   zversion is not string: )rF   rG   rH   rI   tuplerM   rB   )version_strrI   rN   r   r   r   rP      s   


rP   c                 C  s   t d| | d S )Nz5PEP-514 violation in Windows Registry at %s error: %s)LOGGERwarning)r:   whatr   r   r   r8      s   r8   c                  C  s,   t   dd t D } tdt|  d S )Nc                 S  s   g | ]}t |qS r   )repr)rS   r'   r   r   r   
<listcomp>   s    z_run.<locals>.<listcomp>
)r   r   printr;   sorted)interpretersr   r   r   _run   s   ra   __main__)__doc__
__future__r   r9   rH   r   loggingr   r   __name__rX   r   r   r   r   r    r$   r*   r)   rA   r(   rP   r8   ra   r   r   r   r   <module>   s.    
	
