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(); }
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)); }