diff options
Diffstat (limited to 'python/src/com/jetbrains/python/packaging/ui')
-rw-r--r-- | python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java | 119 | ||||
-rw-r--r-- | python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java | 15 |
2 files changed, 42 insertions, 92 deletions
diff --git a/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java b/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java index 348d2817ec75..094149336d5d 100644 --- a/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java +++ b/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java @@ -25,10 +25,8 @@ import com.intellij.util.Consumer; import com.intellij.webcore.packaging.InstalledPackage; import com.intellij.webcore.packaging.InstalledPackagesPanel; import com.intellij.webcore.packaging.PackagesNotificationPanel; -import com.jetbrains.python.packaging.PyExternalProcessException; -import com.jetbrains.python.packaging.PyPackage; -import com.jetbrains.python.packaging.PyPackageManager; -import com.jetbrains.python.packaging.PyPackageManagerImpl; +import com.jetbrains.python.packaging.*; +import com.jetbrains.python.sdk.PySdkUtil; import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.sdk.flavors.IronPythonSdkFlavor; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; @@ -42,33 +40,13 @@ import java.util.Set; * @author yole */ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { - public static final String INSTALL_SETUPTOOLS = "installSetuptools"; - public static final String INSTALL_PIP = "installPip"; + public static final String INSTALL_MANAGEMENT = "installManagement"; public static final String CREATE_VENV = "createVEnv"; - private boolean myHasSetuptools; - private boolean myHasPip = true; + private boolean myHasManagement = false; public PyInstalledPackagesPanel(Project project, PackagesNotificationPanel area) { super(project, area); - myNotificationArea.addLinkHandler(INSTALL_SETUPTOOLS, new Runnable() { - @Override - public void run() { - final Sdk sdk = getSelectedSdk(); - if (sdk != null) { - installManagementTool(sdk, PyPackageManagerImpl.SETUPTOOLS); - } - } - }); - myNotificationArea.addLinkHandler(INSTALL_PIP, new Runnable() { - @Override - public void run() { - final Sdk sdk = getSelectedSdk(); - if (sdk != null) { - installManagementTool(sdk, PyPackageManagerImpl.PIP); - } - } - }); } private Sdk getSelectedSdk() { @@ -85,19 +63,8 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { application.executeOnPooledThread(new Runnable() { @Override public void run() { - PyExternalProcessException exc = null; - try { - PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(selectedSdk); - myHasSetuptools = packageManager.findInstalledPackage(PyPackageManagerImpl.PACKAGE_SETUPTOOLS) != null; - if (!myHasSetuptools) { - myHasSetuptools = packageManager.findInstalledPackage(PyPackageManagerImpl.PACKAGE_DISTRIBUTE) != null; - } - myHasPip = packageManager.findInstalledPackage(PyPackageManagerImpl.PACKAGE_PIP) != null; - } - catch (PyExternalProcessException e) { - exc = e; - } - final PyExternalProcessException externalProcessException = exc; + PyPackageManager packageManager = PyPackageManager.getInstance(selectedSdk); + myHasManagement = packageManager.hasManagement(false); application.invokeLater(new Runnable() { @Override public void run() { @@ -112,42 +79,24 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { myNotificationArea.hide(); if (!invalid) { String text = null; - if (externalProcessException != null) { - final int retCode = externalProcessException.getRetcode(); - if (retCode == PyPackageManagerImpl.ERROR_NO_PIP) { - myHasPip = false; - } - else if (retCode == PyPackageManagerImpl.ERROR_NO_SETUPTOOLS) { - myHasSetuptools = false; - } - else { - text = externalProcessException.getMessage(); - } - final boolean hasPackagingTools = myHasPip && myHasSetuptools; - allowCreateVirtualEnv &= !hasPackagingTools; - - if (externalProcessException.hasHandler()) { - final String key = externalProcessException.getHandler().first; - myNotificationArea.addLinkHandler(key, - new Runnable() { - @Override - public void run() { - externalProcessException.getHandler().second.run(); - myNotificationArea.removeLinkHandler(key); - updateNotifications(selectedSdk); + if (!myHasManagement) { + myNotificationArea.addLinkHandler(INSTALL_MANAGEMENT, + new Runnable() { + @Override + public void run() { + final Sdk sdk = getSelectedSdk(); + if (sdk != null) { + installManagementTools(sdk); } + myNotificationArea.removeLinkHandler(INSTALL_MANAGEMENT); + updateNotifications(selectedSdk); } - ); - } + } + ); } - if (text == null) { - if (!myHasSetuptools) { - text = "Python package management tools not found. <a href=\"" + INSTALL_SETUPTOOLS + "\">Install 'setuptools'</a>"; - } - else if (!myHasPip) { - text = "Python packaging tool 'pip' not found. <a href=\"" + INSTALL_PIP + "\">Install 'pip'</a>"; - } + if (!myHasManagement) { + text = "Python packaging tools not found. <a href=\"" + INSTALL_MANAGEMENT + "\">Install packaging tools</a>"; } if (text != null) { if (allowCreateVirtualEnv) { @@ -157,7 +106,7 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { } } - myInstallButton.setEnabled(!invalid && externalProcessException == null && myHasPip); + myInstallButton.setEnabled(!invalid && myHasManagement); } } }, ModalityState.any()); @@ -170,8 +119,8 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { return Sets.newHashSet("pip", "distutils", "setuptools"); } - private void installManagementTool(@NotNull final Sdk sdk, final String name) { - final PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, sdk, new PyPackageManagerImpl.UI.Listener() { + private void installManagementTools(@NotNull final Sdk sdk) { + final PyPackageManagerUI ui = new PyPackageManagerUI(myProject, sdk, new PyPackageManagerUI.Listener() { @Override public void started() { myPackagesTable.setPaintBusy(true); @@ -180,11 +129,11 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { @Override public void finished(List<PyExternalProcessException> exceptions) { myPackagesTable.setPaintBusy(false); - PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk); + PyPackageManager packageManager = PyPackageManager.getInstance(sdk); if (!exceptions.isEmpty()) { - final String firstLine = "Install package failed. "; - final String description = PyPackageManagerImpl.UI.createDescription(exceptions, firstLine); - packageManager.showInstallationError(myProject, "Failed to install " + name, description); + final String firstLine = "Install Python packaging tools failed. "; + final String description = PyPackageManagerUI.createDescription(exceptions, firstLine); + PackagesNotificationPanel.showError(myProject, "Failed to install Python packaging tools", description); } packageManager.refresh(); updatePackages(new PyPackageManagementService(myProject, sdk)); @@ -194,22 +143,22 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { updateNotifications(sdk); } }); - ui.installManagement(name); + ui.installManagement(); } @Override protected boolean canUninstallPackage(InstalledPackage pkg) { - if (!myHasPip) return false; + if (!myHasManagement) return false; if (PythonSdkType.isVirtualEnv(getSelectedSdk()) && pkg instanceof PyPackage) { final String location = ((PyPackage)pkg).getLocation(); - if (location != null && location.startsWith(PyPackageManagerImpl.getUserSite())) { + if (location != null && location.startsWith(PySdkUtil.getUserSite())) { return false; } } final String name = pkg.getName(); - if (PyPackageManagerImpl.PACKAGE_PIP.equals(name) || - PyPackageManagerImpl.PACKAGE_SETUPTOOLS.equals(name) || - PyPackageManagerImpl.PACKAGE_DISTRIBUTE.equals(name)) { + if (PyPackageManager.PACKAGE_PIP.equals(name) || + PyPackageManager.PACKAGE_SETUPTOOLS.equals(name) || + PyPackageManager.PACKAGE_DISTRIBUTE.equals(name)) { return false; } return true; @@ -217,6 +166,6 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel { @Override protected boolean canUpgradePackage(InstalledPackage pyPackage) { - return myHasPip; + return myHasManagement; } } diff --git a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java index ffd291a995b1..95330b361dfb 100644 --- a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java +++ b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java @@ -23,6 +23,7 @@ import com.intellij.webcore.packaging.InstalledPackage; import com.intellij.webcore.packaging.PackageManagementService; import com.intellij.webcore.packaging.RepoPackage; import com.jetbrains.python.packaging.*; +import com.jetbrains.python.sdk.PySdkUtil; import com.jetbrains.python.sdk.PythonSdkType; import org.apache.xmlrpc.AsyncCallback; import org.jetbrains.annotations.NonNls; @@ -112,7 +113,7 @@ public class PyPackageManagementService extends PackageManagementService { public String getInstallToUserText() { String userSiteText = "Install to user's site packages directory"; if (!PythonSdkType.isRemote(mySdk)) - userSiteText += " (" + PyPackageManagerImpl.getUserSite() + ")"; + userSiteText += " (" + PySdkUtil.getUserSite() + ")"; return userSiteText; } @@ -130,12 +131,12 @@ public class PyPackageManagementService extends PackageManagementService { public Collection<InstalledPackage> getInstalledPackages() throws IOException { List<PyPackage> packages; try { - packages = ((PyPackageManagerImpl)PyPackageManager.getInstance(mySdk)).getPackages(); + packages = PyPackageManager.getInstance(mySdk).getPackages(false); } catch (PyExternalProcessException e) { throw new IOException(e); } - return new ArrayList<InstalledPackage>(packages); + return packages != null ? new ArrayList<InstalledPackage>(packages) : new ArrayList<InstalledPackage>(); } @Override @@ -145,7 +146,7 @@ public class PyPackageManagementService extends PackageManagementService { final String repository = PyPIPackageUtil.PYPI_URL.equals(repoPackage.getRepoUrl()) ? null : repoPackage.getRepoUrl(); final List<String> extraArgs = new ArrayList<String>(); if (installToUser) { - extraArgs.add(PyPackageManagerImpl.USE_USER_SITE); + extraArgs.add(PyPackageManager.USE_USER_SITE); } if (extraOptions != null) { // TODO: Respect arguments quotation @@ -166,7 +167,7 @@ public class PyPackageManagementService extends PackageManagementService { req = new PyRequirement(packageName); } - final PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, mySdk, new PyPackageManagerImpl.UI.Listener() { + final PyPackageManagerUI ui = new PyPackageManagerUI(myProject, mySdk, new PyPackageManagerUI.Listener() { @Override public void started() { listener.operationStarted(packageName); @@ -183,7 +184,7 @@ public class PyPackageManagementService extends PackageManagementService { private String toErrorDescription(List<PyExternalProcessException> exceptions) { String errorDescription = null; if (exceptions != null && exceptions.size() > 0) { - errorDescription = PyPackageManagerImpl.UI.createDescription(exceptions, ""); + errorDescription = PyPackageManagerUI.createDescription(exceptions, ""); } return errorDescription; } @@ -191,7 +192,7 @@ public class PyPackageManagementService extends PackageManagementService { @Override public void uninstallPackages(List<InstalledPackage> installedPackages, final Listener listener) { final String packageName = installedPackages.size() == 1 ? installedPackages.get(0).getName() : null; - PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, mySdk, new PyPackageManagerImpl.UI.Listener() { + PyPackageManagerUI ui = new PyPackageManagerUI(myProject, mySdk, new PyPackageManagerUI.Listener() { @Override public void started() { listener.operationStarted(packageName); |