Exemplo n.º 1
0
 private void InstallPackages()
 {
     Logger?.LogEvent(
         PythonLogEvent.PackageInstallInfoBar,
         new PackageInstallInfoBarInfo()
     {
         Action  = PackageInstallInfoBarActions.Install,
         Context = Context,
     }
         );
     PythonProjectNode.InstallRequirementsAsync(Site, PackageManager, RequirementsTxtPath)
     .HandleAllExceptions(Site, typeof(PackageInstallInfoBar))
     .DoNotWait();
     Close();
 }
Exemplo n.º 2
0
        public override async Task CheckAsync()
        {
            if (IsCreated)
            {
                return;
            }

            if (!Project.Site.GetPythonToolsService().GeneralOptions.PromptForPackageInstallation)
            {
                return;
            }

            var suppressProp = Project.GetProjectProperty(PythonConstants.SuppressPackageInstallationPrompt);

            if (suppressProp.IsTrue())
            {
                return;
            }

            if (Project.IsActiveInterpreterGlobalDefault)
            {
                return;
            }

            var txtPath = Project.GetRequirementsTxtPath();

            if (!File.Exists(txtPath))
            {
                return;
            }

            var active = Project.ActiveInterpreter;

            if (!active.IsRunnable())
            {
                return;
            }

            var pm = Project.InterpreterOptions.GetPackageManagers(active).FirstOrDefault(p => p.UniqueKey == "pip");

            if (pm == null)
            {
                return;
            }

            var missing = await PackagesMissingAsync(pm, txtPath);

            if (!missing)
            {
                return;
            }

            Action installPackages = () => {
                Logger?.LogEvent(
                    PythonLogEvent.PackageInstallInfoBar,
                    new PackageInstallInfoBarInfo()
                {
                    Action = PackageInstallInfoBarActions.Install,
                }
                    );
                PythonProjectNode.InstallRequirementsAsync(Project.Site, pm, txtPath)
                .HandleAllExceptions(Project.Site, typeof(PackageInstallInfoBar))
                .DoNotWait();
                Close();
            };

            Action projectIgnore = () => {
                Logger?.LogEvent(
                    PythonLogEvent.PackageInstallInfoBar,
                    new PackageInstallInfoBarInfo()
                {
                    Action = PackageInstallInfoBarActions.Ignore,
                }
                    );
                Project.SetProjectProperty(PythonConstants.SuppressEnvironmentCreationPrompt, true.ToString());
                Close();
            };

            var messages = new List <IVsInfoBarTextSpan>();
            var actions  = new List <InfoBarActionItem>();

            messages.Add(new InfoBarTextSpan(
                             Strings.RequirementsTxtInstallPackagesInfoBarMessage.FormatUI(
                                 PathUtils.GetFileOrDirectoryName(txtPath),
                                 Project.Caption,
                                 pm.Factory.Configuration.Description
                                 )));
            actions.Add(new InfoBarHyperlink(Strings.RequirementsTxtInfoBarInstallPackagesAction, installPackages));
            actions.Add(new InfoBarHyperlink(Strings.RequirementsTxtInfoBarProjectIgnoreAction, projectIgnore));

            Logger?.LogEvent(
                PythonLogEvent.PackageInstallInfoBar,
                new PackageInstallInfoBarInfo()
            {
                Action = PackageInstallInfoBarActions.Prompt,
            }
                );

            Create(new InfoBarModel(messages, actions, KnownMonikers.StatusInformation, isCloseButtonVisible: true));
        }