o
    Uh                     @  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dd  Ze	d!krae  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   w/var/www/html/construction_image-detection-poc/venv/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 ||^}t| |||}|d ur[|\}}}	t| ||||}
|
d urRt| |||}|d urI|\}}t| |||}||||
|||fW  d    S 	 W d    d S 	 W d    d S 	 W d    d S 1 sgw   Y  d S r#   )r   r   load_version_dataload_arch_dataload_exeload_threaded)r   r"   r%   r&   r   tag_keyversionmajorminor_archexe_dataexeargsthreadedr   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_keyr3   ipr4   r   r   r   r*   K   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SysArchitecturer6   z/SysArchitecture)r   
parse_arch
ValueErrorr:   )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groupsrD   )rE   rK   errorr   r   r   rC   k   s   


rC   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
SysVersionr6   z/SysVersion)r   parse_versionrD   r:   )r   r"   r&   r,   	candidater?   sys_versionr   r   r   r(   v   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#   )rL   ).0ir   r   r   	<genexpr>   s   " z parse_version.<locals>.<genexpr>rG   zversion is not string: )rH   rI   rJ   rK   tuplerO   rD   )version_strrK   rP   r   r   r   rR      s   


rR   c                 C  sj   t |d}|d ur*t|trd| v rdS n|  d| d| d}t|d| ttjd|tjdS )	NDisplayNamefreethreadedTr6   z/DisplayNamezdisplay name is not string: z^\d+(\.\d+){0,2}t$)r   )	r   rH   rI   lowerr:   boolrJ   rK   
IGNORECASE)r   r"   r&   r,   display_namer?   r   r   r   r+      s   

r+   c                 C  s   t d| | d S )Nz5PEP-514 violation in Windows Registry at %s error: %s)LOGGERwarning)r<   whatr   r   r   r:      s   r:   c                  C  s,   t   dd t D } tdt|  d S )Nc                 S  s   g | ]}t |qS r   )repr)rU   r'   r   r   r   
<listcomp>   s    z_run.<locals>.<listcomp>
)r   r   printr=   sorted)interpretersr   r   r   _run   s   ri   __main__)__doc__
__future__r   r;   rJ   r   loggingr   r   __name__r`   r   r   r   r   r    r$   r*   r)   rC   r(   rR   r+   r:   ri   r   r   r   r   <module>   s0    
	
