B aK@sdZddlmZmZmZddlZddlZddlmZm Z ddl Z e j rPddl Z nddl Z e eZddZddZd d Zd d Zd dZddZddZddZddZddZddZddZddZedkredS) z[Implement https://www.python.org/dev/peps/pep-0514/ to discover interpreters - Windows only)absolute_importprint_functionunicode_literalsN) basicConfig getLoggerccs@d}x6yt||VWntk r.PYnX|d7}qWdS)Nr)winregEnumKeyOSError)keyZatr T/opt/alt/python37/lib/python3.7/site-packages/virtualenv/discovery/windows/pep514.py enum_keyssrcCs*yt||dStk r$dSXdS)Nr)r QueryValueExr )r Z value_namer r r get_valuesrccsjxdtjddddftjddtjdftjddtjdfgD].\}}}}}xt|||||D] }|VqTWq4WdS)NHKEY_CURRENT_USERzSoftware\Pythonr@HKEY_LOCAL_MACHINE )rrrZKEY_WOW64_64KEYKEY_WOW64_32KEY process_set)hive hive_namer flags default_archspecr r r discover_pythons$s "rc cszy`t||dtj|B@}x8t|D],}|dkr2q$xt||||D] }|VqBWq$WWdQRXWntk rtYnXdS)NrZ PyLauncher)r OpenKeyExKEY_READrprocess_companyr )rrr rrroot_keycompanyrr r r r.src csLt||6}x.t|D]"}t|||||}|dk r|VqWWdQRXdS)N)rrr process_tag)rr!r r company_keytagrr r r r:s rc Cst||l}t||||}|dk rt|\}}} t|||||} | dk rtt||||} | dk rt| \} } |||| | | fSWdQRXdS)N)rrload_version_dataload_arch_dataload_exe)rr!r#r$rtag_keyversionmajorminor_archZexe_dataexeargsr r r r"Bs r"c Csd|||}yt|d|}|~t|d}|dkrlt|d}|dkrZt|dntj|td}|dk rtj |rt|d}||fSt|d|WdQRXWdQRXWn&t k rtd|d d YnXdS) Nz{}/{}/{}z{}\InstallPathZExecutablePathz#no ExecutablePath or default for itz python.exeZExecutableArgumentsz could not load exe with value {}z{}/{}Z InstallPathmissing) formatrrrmsgospathjoinstrexistsr ) rr!r#r$key_pathZip_keyr.ipr/r r r r'Os"    (r'c CsZt|d}|dk rVd|||}yt|Stk rT}zt||Wdd}~XYnX|S)NZSysArchitecturez{}/{}/{}/SysArchitecture)rr1 parse_arch ValueErrorr2)rr!r$r(rarch_strr8Zsys_archr r r r&fs r&cCsVt|tjrtd|}|r2tdd|DSd|}ndt|}t |dS)Nz^(\d+)(?:\.(\d+))?(?:\.(\d+))?$css"|]}|dk rt|ndVqdS)N)rB).0ir r r sz parse_version..zinvalid format {}zversion is not string: {}) r=r>r?r@rAtuplerEr1rFr;) version_strrArGr r r rHs   rHcCstd||dS)Nz5PEP-514 violation in Windows Registry at {} error: {})LOGGERwarningr1)r4whatr r r r2sr2cCs>tg}xtD]}|t|qWtdt|dS)N )rrappendrFprintr5sorted) interpretersrr r r _runs  rX__main__)__doc__ __future__rrrr3r@loggingrrr>PY3r_winreg__name__rPrrrrrr"r'r&r:r%rHr2rXr r r r s0