<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    aK                 @   s   d Z ddlmZmZmZ ddlZddlZddlmZm	Z	 ddl
Z
e
jrPddlZnddl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re  dS ) z[Implement https://www.python.org/dev/peps/pep-0514/ to discover interpreters - Windows only    )absolute_importprint_functionunicode_literalsN)basicConfig	getLoggerc             c   s@   d}x6yt | |V  W n tk
r.   P Y nX |d7 }qW d S )Nr      )winregEnumKeyOSError)keyZat r   T/opt/alt/python37/lib/python3.7/site-packages/virtualenv/discovery/windows/pep514.py	enum_keys   s    r   c             C   s*   yt | |d S  tk
r$   d S X d S )Nr   )r   QueryValueExr
   )r   Z
value_namer   r   r   	get_value   s    r   c              c   sj   xdt jddddft jddt jdft jddt jdfgD ].\} }}}}xt| ||||D ]
}|V  qTW q4W d S )NHKEY_CURRENT_USERzSoftware\Pythonr   @   HKEY_LOCAL_MACHINE    )r   r   r   ZKEY_WOW64_64KEYKEY_WOW64_32KEYprocess_set)hive	hive_namer   flagsdefault_archspecr   r   r   discover_pythons$   s    "r   c          	   c   sz   y`t | |dt j|B @}x8t|D ],}|dkr2q$xt||||D ]
}|V  qBW q$W W d Q R X W n tk
rt   Y nX d S )Nr   Z
PyLauncher)r   	OpenKeyExKEY_READr   process_companyr
   )r   r   r   r   r   root_keycompanyr   r   r   r   r   .   s    r   c          	   c   sL   t ||6}x.t|D ]"}t| ||||}|d k	r|V  qW W d Q R X d S )N)r   r   r   process_tag)r   r!   r    r   company_keytagr   r   r   r   r   :   s
    r   c          	   C   s   t ||l}t| |||}|d k	rt|\}}}	t| ||||}
|
d k	rtt| |||}|d k	rt|\}}||||
||fS W d Q R X d S )N)r   r   load_version_dataload_arch_dataload_exe)r   r!   r#   r$   r   tag_keyversionmajorminor_archZexe_dataexeargsr   r   r   r"   B   s    
r"   c       	   
   C   s   d | ||}yt|d |}|~ t|d}|d krlt|d }|d krZt|d ntj|td}|d k	rtj	|rt|d}||fS t|d | W d Q R X W d Q R X W n& t
k
r   td |d	d
 Y nX d S )Nz{}/{}/{}z{}\InstallPathZExecutablePathz#no ExecutablePath or default for itz
python.exeZExecutableArgumentsz could not load exe with value {}z{}/{}ZInstallPathmissing)formatr   r   r   msgospathjoinstrexistsr
   )	r   r!   r#   r$   key_pathZip_keyr.   ipr/   r   r   r   r'   O   s"    


(r'   c          
   C   sZ   t |d}|d k	rVd| ||}yt|S  tk
rT } zt|| W d d }~X Y nX |S )NZSysArchitecturez{}/{}/{}/SysArchitecture)r   r1   
parse_arch
ValueErrorr2   )r   r!   r$   r(   r   arch_strr8   Zsys_archr   r   r   r&   f   s    
r&   c             C   sV   t | tjr<td| }|r0ttt| S d	| }nd	t
| }t|d S )Nz
^(\d+)bit$zinvalid format {}zarch is not string: {})
isinstancesixstring_typesrematchintnextitergroupsr1   reprr;   )r<   rA   errorr   r   r   r:   q   s    r:   c             C   sz   xtt |dd| ||f|d| ||fgD ]F\}}|d k	r,yt|S  tk
rp } zt|| W d d }~X Y q,X q,W d S )NZ
SysVersionz{}/{}/{}/SysVersionz{}/{}/{})r   r1   parse_versionr;   r2   )r   r!   r$   r(   	candidater8   sys_versionr   r   r   r%   |   s     r%   c             C   sX   t | tjr>td| }|r2tdd | D S d| }ndt| }t	|d S )Nz^(\d+)(?:\.(\d+))?(?:\.(\d+))?$c             s   s"   | ]}|d k	rt |nd V  qd S )N)rB   ).0ir   r   r   	<genexpr>   s    z parse_version.<locals>.<genexpr>zinvalid format {}zversion is not string: {})
r=   r>   r?   r@   rA   tuplerE   r1   rF   r;   )version_strrA   rG   r   r   r   rH      s    rH   c             C   s   t d| | d S )Nz5PEP-514 violation in Windows Registry at {} error: {})LOGGERwarningr1   )r4   whatr   r   r   r2      s    r2   c              C   s>   t   g } xt D ]}| t| qW tdt|  d S )N
)r   r   appendrF   printr5   sorted)interpretersr   r   r   r   _run   s
    rX   __main__)__doc__
__future__r   r   r   r3   r@   loggingr   r   r>   PY3r   _winreg__name__rP   r   r   r   r   r   r"   r'   r&   r:   r%   rH   r2   rX   r   r   r   r   <module>   s0   


