예제 #1
0
        public AddInterpreterView(
            PythonProjectNode project,
            IServiceProvider serviceProvider,
            IEnumerable<IPythonInterpreterFactory> selected
        ) {
            _project = project;
            Interpreters = new ObservableCollection<InterpreterView>(InterpreterView.GetInterpreters(serviceProvider, project));
            
            var map = new Dictionary<IPythonInterpreterFactory, InterpreterView>();
            foreach (var view in Interpreters) {
                map[view.Interpreter] = view;
                view.IsSelected = false;
            }

            foreach (var interp in selected) {
                InterpreterView view;
                if (map.TryGetValue(interp, out view)) {
                    view.IsSelected = true;
                } else {
                    view = new InterpreterView(interp, interp.Configuration.FullDescription, false);
                    view.IsSelected = true;
                    Interpreters.Add(view);
                }
            }

            _project.InterpreterFactoriesChanged += OnInterpretersChanged;
        }
예제 #2
0
        public AddInterpreterView(
            IServiceProvider serviceProvider,
            IInterpreterOptionsService interpreterService,
            IEnumerable<IPythonInterpreterFactory> selected
        ) {
            _interpreterService = interpreterService;
            Interpreters = new ObservableCollection<InterpreterView>(InterpreterView.GetInterpreters(serviceProvider, interpreterService));
            
            var map = new Dictionary<IPythonInterpreterFactory, InterpreterView>();
            foreach (var view in Interpreters) {
                map[view.Interpreter] = view;
                view.IsSelected = false;
            }

            foreach (var interp in selected) {
                InterpreterView view;
                if (map.TryGetValue(interp, out view)) {
                    view.IsSelected = true;
                } else {
                    view = new InterpreterView(interp, interp.Description, false);
                    view.IsSelected = true;
                    Interpreters.Add(view);
                }
            }

            _interpreterService.InterpretersChanged += OnInterpretersChanged;
        }
예제 #3
0
        internal async Task UpdateInterpreter(InterpreterView view) {
            if (!Dispatcher.CheckAccess()) {
                await Dispatcher.InvokeAsync(() => UpdateInterpreter(view));
                return;
            }

            try {
                await _ready.WaitAsync();
            } catch (ObjectDisposedException) {
                return;
            }

            try {
                WillInstallPip = false;
                WillInstallVirtualEnv = false;
                WillInstallElevated = false;
                MayNotSupportVirtualEnv = false;

                Debug.Assert(view != null);
                if (view == null) {
                    return;
                }

                var interp = view.Interpreter;
                Debug.Assert(interp != null);
                if (interp == null) {
                    return;
                }

                //MayNotSupportVirtualEnv = !SupportsVirtualEnv.Contains(interp.Id);
                RefreshCanCreateVirtualEnv(VirtualEnvPath);

                var libPath = interp.Configuration.LibraryPath;
                if (Directory.Exists(libPath)) {
                    var installed = await interp.FindModulesAsync("pip", "virtualenv", "venv");

                    if (installed.Contains("venv") || installed.Contains("virtualenv")) {
                        WillInstallPip = false;
                        WillInstallVirtualEnv = false;
                        UseVEnv = !installed.Contains("virtualenv");
                    } else {
                        WillInstallPip = !installed.Contains("pip");
                        WillInstallVirtualEnv = true;
                        UseVEnv = false;
                    }
                    WillInstallElevated = (WillInstallPip || WillInstallVirtualEnv) &&
                        _project.Site.GetPythonToolsService().GeneralOptions.ElevatePip;
                }
            } finally {
                try {
                    _ready.Release();
                } catch (ObjectDisposedException) {
                }
            }
        }
예제 #4
0
        private void RefreshCanCreateVirtualEnv(string path) {
            if (!Dispatcher.CheckAccess()) {
                Dispatcher.BeginInvoke((Action)(() => RefreshCanCreateVirtualEnv(path)));
                return;
            }

            if (Interpreters.Count == 0) {
                WillCreateVirtualEnv = false;
                WillAddVirtualEnv = false;
                CannotCreateVirtualEnv = false;
                NoInterpretersInstalled = true;
                return;
            }

            if (!IsValidVirtualEnvPath(path) || BaseInterpreter == null) {
                WillCreateVirtualEnv = false;
                WillAddVirtualEnv = false;
                CannotCreateVirtualEnv = true;
                NoInterpretersInstalled = false;
                return;
            }


            if (Directory.Exists(path) && Directory.EnumerateFileSystemEntries(path).Any()) {
                WillCreateVirtualEnv = false;

                var config = VirtualEnv.FindInterpreterConfiguration(null, path, _interpreterService);
                if (config != null && File.Exists(config.InterpreterPath)) {
                    var baseInterp = _interpreterService.FindInterpreter(config.Id);
                    InterpreterView baseInterpView;
                    if (baseInterp != null &&
                        (baseInterpView = Interpreters.FirstOrDefault(iv => iv.Interpreter == baseInterp)) != null) {
                        if (_lastUserSelectedBaseInterpreter == null) {
                            _lastUserSelectedBaseInterpreter = BaseInterpreter;
                        }
                        BaseInterpreter = baseInterpView;
                        WillAddVirtualEnv = true;
                    } else {
                        WillAddVirtualEnv = false;
                    }
                } else {
                    WillAddVirtualEnv = false;
                }
                CannotCreateVirtualEnv = !WillAddVirtualEnv;
                NoInterpretersInstalled = false;
            } else {
                WillCreateVirtualEnv = true;
                WillAddVirtualEnv = false;
                CannotCreateVirtualEnv = false;
                NoInterpretersInstalled = false;
                if (_lastUserSelectedBaseInterpreter != null) {
                    BaseInterpreter = _lastUserSelectedBaseInterpreter;
                    _lastUserSelectedBaseInterpreter = null;
                }
            }

        }