B a@sdZddlmZmZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZddlmZdd lmZdd lmZmZe Ze eeej<dd dZdddZddZddZGdddeZddZdZ dS)z We acquire the python information by running an interrogation script via subprocess trigger. This operation is not cheap, especially not on Windows. To not have to pay this hefty cost every time we apply multiple levels of caching. )absolute_importunicode_literalsN) OrderedDict)AppDataDisabled) PythonInfo)PY2)Path) ensure_text)Popen subprocessTFcCsP|dkrtjn|}t|||||d}t|trL|r8|ntdt|d}|S)N) ignore_cachez%s)osenviron_get_from_cache isinstance Exceptionlogginginfostr)clsapp_dataexeenvZraise_on_errorr resultrT/opt/alt/python37/lib/python3.7/site-packages/virtualenv/discovery/cached_py_info.pyfrom_exes rcCsNt|}|s|tkrt|}nt|||||}|}t|<t|trJ||_|S)N)r_CACHE_get_via_file_cacherr executable)rrrrr Zexe_pathrpy_inforrrr&s    rc Cs4tt|}y|j}Wntk r2d}YnX|dkrBt}d||}}||r| } | d| d| d} } } | |kr| |kr| dd| D}|j } | dk rt j| s|d}n||dkr&t||||\}}|dkr"|||d} || n|}WdQRX|S)Npathst_mtimecontentcSsi|]\}}||qSrr).0kvrrr Csz'_get_via_file_cache..)r#r"r$)r rstatr#OSErrorrr lockedexistsreadZ _from_dictitemsZsystem_executabler r"remove_run_subprocessZ_to_dictwrite)rrr"rrZ path_textZ path_modifiedr Z py_info_storedataZof_pathZ of_st_mtimeZ of_contentZsys_exefailurerrrr5s4      rc Cs$ttjtjd}||}|t|g}|}| ddt dt |y0t |dtjtjtj|d}|\}}|j} Wn6tk r} zd| j| j}}} Wdd} ~ XYnXWdQRXd\} } | dkr||} || _n6d || |rd |nd|rd |nd} t| } | | fS) Nz py_info.py__PYVENV_LAUNCHER__z get interpreter info via cmd: %sT)universal_newlinesstdinstderrstdoutr)NNrz#failed to query {} with code {}{}{}z out: {!r}z err: {!r})rr r"abspath__file__parentZensure_extractedrcopypoprdebugLogCmdr r PIPE communicate returncoder*strerrorerrnoZ _from_jsonrformat RuntimeError)rrrrZpy_info_scriptcmdprocessouterrcodeZos_errorrr3msgrrrr0Ts:     0 r0c@s&eZdZdddZddZddZdS) r@NcCs||_||_dS)N)rHr)selfrHrrrr__init__yszLogCmd.__init__csVdddfdd|jD}|jdk rD|d|j7}trR|dS|S)NcSst|tr|dS|S)Nzutf-8)rbytesdecode)r'rrre~szLogCmd.__repr__..e c3s|]}t|VqdS)N)pipesquote)r%c)rRrr sz"LogCmd.__repr__..z env of {!r}zutf-8)joinrHrrFrencode)rNZcmd_reprr)rRr__repr__}s  zLogCmd.__repr__cCst|}tr|dS|S)Nzutf-8)reprrrQ)rNrawrrr __unicode__s zLogCmd.__unicode__)N)__name__ __module__ __qualname__rOrZr]rrrrr@xs  r@cCs|tdS)N)Z py_info_clearrclear)rrrrrasra)rrar@)NTF)T)!__doc__ __future__rrrr rTsys collectionsrZvirtualenv.app_datarZvirtualenv.discovery.py_inforZvirtualenv.inforZvirtualenv.util.pathrZvirtualenv.util.sixr Zvirtualenv.util.subprocessr r rrrrrr0objectr@raZ ___all___rrrrs*       $