Disable package management actions for Docker based interpreters.

This commit is contained in:
Dmitry Trofimov
2015-10-05 15:48:18 +02:00
parent 6d9256b7ac
commit 2004a19942
3 changed files with 30 additions and 2 deletions
@@ -279,7 +279,7 @@ public class InstalledPackagesPanel extends JPanel {
final int[] selected = myPackagesTable.getSelectedRows();
boolean upgradeAvailable = false;
boolean canUninstall = selected.length != 0;
boolean canInstall = true;
boolean canInstall = installEnabled();
boolean canUpgrade = true;
if (myPackageManagementService != null && selected.length != 0) {
for (int i = 0; i != selected.length; ++i) {
@@ -318,6 +318,10 @@ public class InstalledPackagesPanel extends JPanel {
return true;
}
protected boolean installEnabled() {
return true;
}
protected boolean canUpgradePackage(InstalledPackage pyPackage) {
return true;
}
@@ -138,7 +138,7 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
}
myNotificationArea.showWarning(builder.toString());
}
myInstallButton.setEnabled(!invalid && myHasManagement);
myInstallButton.setEnabled(!invalid && installEnabled());
}
}
}
@@ -155,6 +155,11 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
@Override
protected boolean canUninstallPackage(InstalledPackage pkg) {
if (!myHasManagement) return false;
if (PythonSdkType.isDocker(getSelectedSdk())) {
return false;
}
if (PythonSdkType.isVirtualEnv(getSelectedSdk()) && pkg instanceof PyPackage) {
final String location = ((PyPackage)pkg).getLocation();
if (location != null && location.startsWith(PySdkUtil.getUserSite())) {
@@ -173,11 +178,24 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
@Override
protected boolean canInstallPackage(@NotNull final InstalledPackage pyPackage) {
return installEnabled();
}
@Override
protected boolean installEnabled() {
if (PythonSdkType.isDocker(getSelectedSdk())) {
return false;
}
return myHasManagement;
}
@Override
protected boolean canUpgradePackage(InstalledPackage pyPackage) {
if (PythonSdkType.isDocker(getSelectedSdk())) {
return false;
}
return myHasManagement && !PyCondaPackageManagerImpl.PYTHON.equals(pyPackage.getName());
}
}
@@ -250,6 +250,12 @@ public class PythonSdkType extends SdkType {
return false;
}
public static boolean isDocker(@Nullable final Sdk sdk) {
return sdk != null && sdk.getSdkAdditionalData() instanceof RemoteSdkAdditionalData &&
((RemoteSdkAdditionalData) sdk.getSdkAdditionalData()).getRemoteConnectionType() == CredentialsType.DOCKER;
}
public static boolean isRemote(@Nullable String sdkPath) {
return isRemote(findSdkByPath(sdkPath));
}