summaryrefslogtreecommitdiff
path: root/python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java')
-rw-r--r--python/src/com/jetbrains/python/packaging/ui/PyInstalledPackagesPanel.java119
1 files changed, 34 insertions, 85 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;
}
}