
    3i              	      f   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rddlmZ eeedz  edz  eeeedz  f   Z e	e      Zded<    ej0                  d	ej2                        Zd
ed<    ej0                  dej2                        Zd
ed<    ej0                  dej2                  ej8                  z        Zd
ed<   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(  r e+        yy)-z\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_REc              #  l   K   d}	 	 t        j                  | |       |dz  }# t        $ r Y y w xY ww)Nr      )winregEnumKeyOSError)keyats     T/var/www/opsc/venv/lib/python3.12/site-packages/python_discovery/_windows/_pep514.py	enum_keysr   2   sG     	
B
	..b)) 	a   		s   4% 4	1414c                T    	 t        j                  | |      d   S # t        $ r Y y w xY w)Nr   )r   QueryValueExr   )r   
value_names     r   	get_valuer   <   s1    ""3
3A66 s    	''c               #    K   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 {    ! y 7 w)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_archs        r   discover_pythonsr'   C   s     		!	!#68JArR		"	"$8:LfNdNdfhi		"	"$8:LfNdNdfhi6 J1ie\
 tYULIIIJ
 	Js   A6B8B 9Bc              #    K   	 t        j                  | |dt         j                  |z        5 }t        |      D ]  }|dk(  r	t	        ||||      E d {      	 d d d        y 7 # 1 sw Y   y xY w# t
        $ r Y y w xY ww)Nr   
PyLauncher)r   	OpenKeyExKEY_READr   process_companyr   )r#   r$   r   r%   r&   root_keycompanys          r   r"   r"   L   s     dCFOOe,CD 	W$X. Wl**9gxVVVW	W 	W W		W 	W
  s]   B)A2 &A&A$A&A2 #B$A&&A/+A2 .B/A2 2	A>;B=A>>Bc           	   #     K   t        j                  ||      5 }t        |      D ]  }t        | ||||      }||  	 d d d        y # 1 sw Y   y xY wwN)r   r*   r   process_tag)r$   r.   r-   r&   company_keytagspecs          r   r,   r,   ]   s_      
		(G	, [) 	Cy';\RD
	  s!   A A
A
	A
AAc                <   t        j                  ||      5 }t        | |||      }|`|\  }}}	t        | ||||      }
|
?t	        | |||      }|%|\  }}t        | |||      }||||
|||fcd d d        S 	 d d d        y 	 d d d        y 	 d d d        y # 1 sw Y   y xY wr0   )r   r*   load_version_dataload_arch_dataload_exeload_threaded)r$   r.   r2   r3   r&   tag_keyversionmajorminor_archexe_dataexeargsthreadeds                  r   r1   r1   j   s    			+s	+ w#IwWE%OE5!!)Wc7LQD#IwSI' (IC,YgNH"E5$#tK        s   AB4B>BBBc                   |  d| d| }	 t        j                  || d      5 }|5  t        |d      }|;t        |d       }|t        |d       n t        j
                  j                  |d      }|At        j
                  j                  |      r"t        |d      }||fcd d d        cd d d        S t        |d|        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w# t        $ r t        | dd	       Y y w xY 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.   r2   r3   key_pathip_keyrA   iprB   s	            r   r8   r8   {   s$   AgYau-H2kse<+@A 	BVV 	BF$45C{vt,:"GH '',,r<8C277>>##6 )>?Dy	B 	B 	B :3%@A	B 	B 	B 	B 	B   2xj%y12sX   C- C!A:C"	C!+	C- 5CC!C- C	C!!C*&C- *C- -DDc                    t        |d      }||  d| d| d}	 t        |      S |S # t        $ r}t        ||       Y d }~|S d }~ww xY w)NSysArchitecturerE   z/SysArchitecture)r   
parse_arch
ValueErrorrI   )r$   r.   r3   r:   r&   arch_strrN   sys_archs           r   r7   r7      sk    "34H['!C50@A	$h''   	$(##	$s   
( 	AAAc                    t        | t              rRt        j                  |       x}r+t	        t        t        |j                                           S d|  }t        |      d| }t        |      )Ninvalid format zarch is not string: )	
isinstancestrr   matchintnextitergroupsrT   )rU   r[   errors      r   rS   rS      sm    (C NN8,,5,tD0122!(, U
 'xl3
U
    c                    t        |d      |  d| d| df||  d| d| ffD ]  \  }}|		 t        |      c S  y # t        $ r}t        ||       Y d }~3d }~ww xY w)N
SysVersionrE   z/SysVersion)r   parse_versionrT   rI   )r$   r.   r3   r:   	candidaterN   sys_versions          r   r6   r6      s     
7L	)i['!C5+TU	1WIQse,-  +	8  +$Y//+   +Hk**+s   
=	AAAc                   t        | t              rht        j                  |       x}rA|j	                         \  }}}|t        |      nd |t        |      nd |t        |      fS d fS d|  }t        |      d| }t        |      )NrX   zversion is not string: )rY   rZ   r   r[   r_   r\   rT   )version_strr[   g1g2g3r`   s         r   rd   rd      s    +s#%%k2252JBB>Bt>Bt>B  04 
 "+/ U
 *+9
U
ra   c                    t        |d      }|=t        |t              rd|j                         v ry|  d| d| d}t	        |d|       t        t        j                  |            S )NDisplayNamefreethreadedTrE   z/DisplayNamezdisplay name is not string: )r   rY   rZ   lowerrI   boolr   r[   )r$   r.   r3   r:   display_namerN   s         r   r9   r9      st    Wm4LlC(!3!3!55#AgYauLAH88HIJ &&s+,,ra   c                2    t         j                  d| |       y )Nz5PEP-514 violation in Windows Registry at %s error: %s)r
   warning)rK   whats     r   rI   rI      s    OOKTSWXra   c                    t                t               D  cg c]  } t        |        }} t        j                  j                  dj                  t        |                   t        j                  j                  d       y c c} w )N
)r   r'   reprsysstdoutwriterL   sorted)r4   interpreterss     r   _runr}      sX    M+;+=>4DJ>L>JJTYYvl345JJT ?s   B__main__)r   r   returnzGenerator[str, None, None])r   r   r   z
str | Noner   r   )r   $Generator[_RegistrySpec, None, None])r#   r\   r$   rZ   r   rZ   r%   r\   r&   r\   r   r   )
r$   rZ   r.   rZ   r-   r   r&   r\   r   r   )r$   rZ   r.   rZ   r2   r   r3   rZ   r&   r\   r   z_RegistrySpec | None)
r$   rZ   r.   rZ   r2   r   r3   rZ   r   ztuple[str, str | None] | None)r$   rZ   r.   rZ   r3   rZ   r:   r   r&   r\   r   z
int | None)rU   r   r   r\   )
r$   rZ   r.   rZ   r3   rZ   r:   r   r   z0tuple[int | None, int | None, int | None] | None)rh   r   r   z)tuple[int | None, int | None, int | None])
r$   rZ   r.   rZ   r3   rZ   r:   r   r   rp   )rK   rZ   rt   objectr   None)r   r   ),__doc__
__future__r   loggingrJ   rerx   r   r   r   typingr   r   r   collections.abcr	   tuplerZ   r\   rp   _RegistrySpec__name__r
   __annotations__compileVERBOSEr   r   
IGNORECASEr   r   r   r'   r"   r,   r1   r8   r7   rS   r6   rd   r9   rI   r}    ra   r   <module>r      s   b "  	 	 
  * , ,)#sTz3:sD#sTzQRM!*8!4	 4#-2:: JJ$
   '1bjj JJ	'# 	 ,62:: JJ	, ( 	J
 
 	
  *"


 
 	

 *
"* 
 	
 6$	-Y zF ra   