o
    Vi                  	   @  s  U d Z ddl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	 ddl
mZmZmZ erHddlmZ eeedB edB eeeedB f Ze	eZded< ed	ejZd
ed< edejZd
ed< edejejB Zd
ed< dKddZdLddZdMddZ dNd#d$Z!dOd'd(Z"dPd,d-Z#dQd/d0Z$dRd3d4Z%dSd6d7Z&dTd9d:Z'dUd=d>Z(dVd@dAZ)dWdFdGZ*dXdHdIZ+edJkre+  dS dS )Yz\Implement https://www.python.org/dev/peps/pep-0514/ to discover interpreters - Windows only.    )annotationsN)basicConfig	getLogger)TYPE_CHECKINGAnyFinal)	GeneratorzFinal[logging.Logger]_LOGGERzK
    ^
    (\d+)   # bitness number
    bit     # literal suffix
    $
    zFinal[re.Pattern[str]]_ARCH_REzz
    ^
    (\d+)            # major
    (?:\.(\d+))?     # optional minor
    (?:\.(\d+))?     # optional micro
    $
    _VERSION_REz
    ^
    \d+              # major
    (\.\d+){0,2}     # optional minor/micro
    t                # free-threaded flag
    $
    _THREADED_TAG_REkeyr   returnGenerator[str, None, None]c                 c  s:    d}	 z	t | |V  W n
 ty   Y d S w |d7 }q)Nr   T   )winregEnumKeyOSError)r   at r   U/home/ubuntu/.local/lib/python3.10/site-packages/python_discovery/_windows/_pep514.py	enum_keys2   s   r   
value_name
str | Nonec                 C  s(   z	t | |d W S  ty   Y d S w )Nr   )r   QueryValueExr   )r   r   r   r   r   	get_value<   s
   r   $Generator[_RegistrySpec, None, None]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_pythonsC   s   r(   r$   intr%   strr&   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#   L   s   &r#   r0   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%   r0   r/   r'   company_keytagspecr   r   r   r.   ]   s   "r.   r3   r4   _RegistrySpec | Nonec                 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 r1   )r   r,   load_version_dataload_arch_dataload_exeload_threaded)r%   r0   r3   r4   r'   tag_keyversionmajorminor_archexe_dataexeargsthreadedr   r   r   r2   j   s$   
$r2   tuple[str, str | None] | Nonec           	   	   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%   r0   r3   r4   key_pathip_keyrB   iprC   r   r   r   r9   {   s0   


 *r9   r;   
int | Nonec              
   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SysArchitecturerF   z/SysArchitecture)r   
parse_arch
ValueErrorrJ   )r%   r0   r4   r;   r'   arch_strrO   sys_archr   r   r   r8      s   

r8   rV   c                 C  sP   t | trt|  }rttt| S d|  }t|d| }t|)Ninvalid format zarch is not string: )	
isinstancer*   r
   matchr)   nextitergroupsrU   )rV   rZ   errorr   r   r   rT      s   


rT   0tuple[int | None, int | None, int | None] | Nonec                 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
SysVersionrF   z/SysVersion)r   parse_versionrU   rJ   )r%   r0   r4   r;   	candidaterO   sys_versionr   r   r   r7      s   r7   version_str)tuple[int | None, int | None, int | None]c                 C  s   t | tr:t|  }r1| \}}}|d urt|nd |d ur$t|nd |d ur.t|fS d fS d|  }t|d| }t|)NrX   zversion is not string: )rY   r*   r   rZ   r]   r)   rU   )rd   rZ   g1g2g3r^   r   r   r   ra      s   


ra   boolc                 C  sb   t |d}|d ur*t|trd| v rdS n|  d| d| d}t|d| tt|S )NDisplayNamefreethreadedTrF   z/DisplayNamezdisplay name is not string: )r   rY   r*   lowerrJ   ri   r   rZ   )r%   r0   r4   r;   display_namerO   r   r   r   r:      s   

r:   rL   whatobjectNonec                 C  s   t d| | d S )Nz5PEP-514 violation in Windows Registry at %s error: %s)r	   warning)rL   rn   r   r   r   rJ      s   rJ   c                  C  s<   t   dd t D } tjdt|  tjd d S )Nc                 S  s   g | ]}t |qS r   )repr).0r5   r   r   r   
<listcomp>   s    z_run.<locals>.<listcomp>
)r   r(   sysstdoutwriterM   sorted)interpretersr   r   r   _run   s   r{   __main__)r   r   r   r   )r   r   r   r   r   r   )r   r   )r$   r)   r%   r*   r   r*   r&   r)   r'   r)   r   r   )
r%   r*   r0   r*   r/   r   r'   r)   r   r   )r%   r*   r0   r*   r3   r   r4   r*   r'   r)   r   r6   )
r%   r*   r0   r*   r3   r   r4   r*   r   rE   )r%   r*   r0   r*   r4   r*   r;   r   r'   r)   r   rR   )rV   r   r   r)   )
r%   r*   r0   r*   r4   r*   r;   r   r   r_   )rd   r   r   re   )
r%   r*   r0   r*   r4   r*   r;   r   r   ri   )rL   r*   rn   ro   r   rp   )r   rp   ),__doc__
__future__r   loggingrK   rerv   r   r   r   typingr   r   r   collections.abcr   tupler*   r)   ri   _RegistrySpec__name__r	   __annotations__compileVERBOSEr
   r   
IGNORECASEr   r   r   r(   r#   r.   r2   r9   r8   rT   r7   ra   r:   rJ   r{   r   r   r   r   <module>   sT    "	






	











