B  q/S@sddlmZmZddlZddlZddlZddlmZddlm Z m Z ddl m Z ddl mZddlmZGd d d e Zdd d Zdd dZddZGdddeZddZddZGdddeZdS))absolute_importunicode_literalsN)IS_WIN) ensure_str ensure_text)Discover) PythonInfo) PythonSpeccs@eZdZfddZeddZddZddZd d ZZ S) Builtincs:tt|||jr|jntjg|_|j|_|j|_dS)N) superr __init__pythonsys executable python_specapp_datatry_first_with)selfoptions) __class__M/opt/alt/python37/lib/python3.7/site-packages/virtualenv/discovery/builtin.pyr szBuiltin.__init__c Cs6|jddddtdgdd|jdd d tdgd ddS) Nz-pz--pythonrpyappendzinterpreter based on what to create environment (path/identifier) - by default use the interpreter where the tool is installed - first found wins)destmetavartypeactiondefaulthelpz--try-first-withrpy_exez:try first these interpreters before starting the discovery) add_argumentstr)clsparserrrradd_parser_argumentss"zBuiltin.add_parser_argumentscCs4x.|jD]$}t||j|j|j}|dk r|SqWdS)N)rget_interpreterrrZ_env)rrresultrrrrun-s  z Builtin.runcCs t|S)N)r __unicode__)rrrr__repr__4szBuiltin.__repr__cCs.t|jdkr|jdn|j}d|jj|S)Nrrz{} discover of python_spec={!r})lenrformatr__name__)rspecrrrr*7szBuiltin.__unicode__) r. __module__ __qualname__r classmethodr&r)r+r* __classcell__rr)rrr s   r cCst|}td|t}|dkr*tjn|}x`t||||D]N\}}|j|f}||krZq>td|| ||rt d||S| |q>WdS)Nzfind interpreter for spec %rz proposed %sz accepted %s) r Zfrom_string_speclogginginfosetosenvironpropose_interpretersZsystem_executableZ satisfiesdebugadd)keyrrenvr/Zproposed_paths interpreterZimpl_must_matchrrrr'<s      r'c cs|dkrtjn|}xZ|D]R}tj|}yt|Wntk rJYqXtjtj|||ddfVqW|jdk ryt|jWntk r|jrYn"Xtjtj|j||ddfV|jrdSnDt |dfVt rddl m }x ||||D]}|dfVqWt |}t} xt|D]\} }t|}tt| ||xpt|D]d\} } t| |} | dk rZtj| }|| krZ| |tj||d|d}|dk rZ|| fVqZWq.WdS)N)r=Tr)r9F)Zraise_on_errorr=)r7r8pathabspathlstatOSErrorr Zfrom_exeZis_absZcurrent_systemrwindowsr9 get_pathsr6 enumeraterr4r: LazyPathDumppossible_specs check_pathr;PathPythonInfo)r/rrr=r!r?r9r>pathsZ tested_exespos candidatematchfoundexerrrr9LsH  "         r9c Csj|tdd}|dkrFytd}Wnttfk rDtj}YnX|sPg}ndd|tjD}|S)NPATHCS_PATHcSsg|]}tj|r|qSr)r7r?exists).0prrr szget_paths..) getr#r7confstrAttributeError ValueErrordefpathsplitpathsep)r=r?rJrrrrD~s rDc@s$eZdZddZddZddZdS)rFcCs||_||_||_dS)N)rKr?r=)rrKr?r=rrrr szLazyPathDump.__init__cCs t|S)N)rr*)rrrrr+szLazyPathDump.__repr__c Csd|j|j}|jtdr|d7}xjt|jD]Z}y0tj|j|}tj |sft |tj shw6Wnt k r~YnX|d7}||7}q6W|S)Nzdiscover PATH[{}]={}Z_VIRTUALENV_DEBUGz with => ) r-rKr?r=rVr#r7listdirjoinisdiraccessX_OKrB)rcontent file_name file_pathrrrr*s zLazyPathDump.__unicode__N)r.r0r1r r+r*rrrrrFsrFcCs\tj|\}}tjdkr*|dkr*|d}tj|r:|Stj||}tj|rX|SdS)Nwin32z.exe)r7r?splitextrplatformisfiler_)rLr?_extrrrrHs  rHccs0|jdfVx|D]\}}||fVqWdS)NF)Zstr_specZgenerate_names)r/rOrMrrrrGs rGc@seZdZdZdS)rIr]N)r.r0r1__doc__rrrrrIsrI)NN)N) __future__rrr4r7rZvirtualenv.inforZvirtualenv.util.sixrrdiscoverrZpy_infor Zpy_specr r r'r9rDobjectrFrHrGrIrrrrs     -  2