mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 06:51:17 +07:00
Use PyPackageManager only via its public interface
This commit is contained in:
+1
-2
@@ -36,7 +36,6 @@ import com.jetbrains.python.newProject.PythonProjectGenerator;
|
||||
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.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdk.flavors.JythonSdkFlavor;
|
||||
import com.jetbrains.python.sdk.flavors.PyPySdkFlavor;
|
||||
@@ -319,7 +318,7 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane
|
||||
PyFrameworkProjectGenerator frameworkProjectGenerator = (PyFrameworkProjectGenerator)myProjectGenerator;
|
||||
String frameworkName = frameworkProjectGenerator.getFrameworkTitle();
|
||||
if (sdk != null && !isFrameworkInstalled(sdk)) {
|
||||
final PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk);
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(sdk);
|
||||
final boolean onlyWithCache =
|
||||
PythonSdkFlavor.getFlavor(sdk) instanceof JythonSdkFlavor || PythonSdkFlavor.getFlavor(sdk) instanceof PyPySdkFlavor;
|
||||
String warningText = frameworkName + " will be installed on selected interpreter";
|
||||
|
||||
@@ -15,18 +15,45 @@
|
||||
*/
|
||||
package com.jetbrains.python.packaging;
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public abstract class PyPackageManager {
|
||||
public static final Key<Boolean> RUNNING_PACKAGING_TASKS = Key.create("PyPackageRequirementsInspection.RunningPackagingTasks");
|
||||
|
||||
public static final String PACKAGE_SETUPTOOLS = "setuptools";
|
||||
public static final String PACKAGE_PIP = "pip";
|
||||
public static final String PACKAGE_DISTRIBUTE = "distribute";
|
||||
|
||||
// Bundled versions of package management tools
|
||||
public static final String SETUPTOOLS_VERSION = "1.1.5";
|
||||
public static final String PIP_VERSION = "1.4.1";
|
||||
|
||||
public static final String SETUPTOOLS = PACKAGE_SETUPTOOLS + "-" + SETUPTOOLS_VERSION;
|
||||
public static final String PIP = PACKAGE_PIP + "-" + PIP_VERSION;
|
||||
|
||||
public static final int OK = 0;
|
||||
public static final int ERROR_NO_PIP = 2;
|
||||
public static final int ERROR_NO_SETUPTOOLS = 3;
|
||||
public static final int ERROR_INVALID_SDK = -1;
|
||||
public static final int ERROR_TOOL_NOT_FOUND = -2;
|
||||
public static final int ERROR_TIMEOUT = -3;
|
||||
public static final int ERROR_INVALID_OUTPUT = -4;
|
||||
public static final int ERROR_ACCESS_DENIED = -5;
|
||||
public static final int ERROR_EXECUTION = -6;
|
||||
public static final String USE_USER_SITE = "--user";
|
||||
|
||||
public static PyPackageManager getInstance(Sdk sdk) {
|
||||
return PyPackageManagers.getInstance().forSdk(sdk);
|
||||
}
|
||||
@@ -38,8 +65,19 @@ public abstract class PyPackageManager {
|
||||
public abstract void showInstallationError(Project project, String title, String description);
|
||||
public abstract void showInstallationError(Component owner, String title, String description);
|
||||
public abstract void refresh();
|
||||
@NotNull
|
||||
public abstract String createVirtualEnv(@NotNull String destinationDir, boolean useGlobalSite) throws PyExternalProcessException;
|
||||
@Nullable
|
||||
public abstract List<PyPackage> getPackagesFast() throws PyExternalProcessException;
|
||||
@NotNull
|
||||
public abstract List<PyPackage> getPackages() throws PyExternalProcessException;
|
||||
@Nullable
|
||||
public abstract PyPackage findInstalledPackage(String name) throws PyExternalProcessException;
|
||||
@Nullable
|
||||
public abstract PyPackage findInstalledPackage(String name, boolean cachedOnly) throws PyExternalProcessException;
|
||||
@Nullable
|
||||
public abstract List<PyRequirement> getRequirements(@NotNull Module module);
|
||||
public abstract Set<PyPackage> getDependents(@NotNull PyPackage pkg) throws PyExternalProcessException;
|
||||
@Deprecated
|
||||
public abstract boolean cacheIsNotNull();
|
||||
}
|
||||
|
||||
@@ -16,12 +16,8 @@
|
||||
package com.jetbrains.python.packaging;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
@@ -35,22 +31,4 @@ public abstract class PyPackageManagers {
|
||||
|
||||
@NotNull
|
||||
public abstract PyPackageManager forSdk(Sdk sdk);
|
||||
|
||||
/**
|
||||
* Returns the list of requirements from 'requirements.txt' or 'setup.py' files in the specified module.
|
||||
*
|
||||
* @param module the module to check for requirements
|
||||
* @return the list of requirements, or null if the module contains neither requirements.txt nor setup.py.
|
||||
*/
|
||||
@Nullable
|
||||
public abstract List<PyRequirement> getRequirements(Module module);
|
||||
|
||||
/**
|
||||
* Returns the list of requirements from 'requirements.txt' file in the specified module.
|
||||
*
|
||||
* @param module the module to check for requirements
|
||||
* @return the list of requirements, or null if the module does not contain a requirements.txt
|
||||
*/
|
||||
@Nullable
|
||||
public abstract List<PyRequirement> getRequirementsFromTxt(Module module);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.intellij.openapi.projectRoots.Sdk;
|
||||
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.sdk.PythonSdkType;
|
||||
|
||||
/**
|
||||
@@ -48,7 +47,7 @@ public class RestPythonUtil {
|
||||
if (module != null) {
|
||||
Sdk sdk = PythonSdkType.findPythonSdk(module);
|
||||
if (sdk != null) {
|
||||
PyPackageManagerImpl manager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk);
|
||||
PyPackageManager manager = PyPackageManager.getInstance(sdk);
|
||||
try {
|
||||
final PyPackage sphinx = manager.findInstalledPackage("Sphinx");
|
||||
presentation.setEnabled(sphinx != null);
|
||||
|
||||
@@ -160,15 +160,16 @@ public class PyPackageRequirementsInspection extends PyInspection {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (PyPackageManagerImpl.PACKAGE_SETUPTOOLS.equals(packageName)) {
|
||||
if (PyPackageManager.PACKAGE_SETUPTOOLS.equals(packageName)) {
|
||||
return;
|
||||
}
|
||||
final Module module = ModuleUtilCore.findModuleForPsiElement(packageReferenceExpression);
|
||||
if (module != null) {
|
||||
Collection<PyRequirement> requirements = PyPackageManagerImpl.getRequirements(module);
|
||||
if (requirements != null) {
|
||||
final Sdk sdk = PythonSdkType.findPythonSdk(module);
|
||||
if (sdk != null) {
|
||||
final Sdk sdk = PythonSdkType.findPythonSdk(module);
|
||||
if (sdk != null) {
|
||||
final PyPackageManager manager = PyPackageManager.getInstance(sdk);
|
||||
Collection<PyRequirement> requirements = manager.getRequirements(module);
|
||||
if (requirements != null) {
|
||||
requirements = getTransitiveRequirements(sdk, requirements, new HashSet<PyPackage>());
|
||||
}
|
||||
if (requirements == null) return;
|
||||
@@ -191,7 +192,7 @@ public class PyPackageRequirementsInspection extends PyInspection {
|
||||
}
|
||||
}
|
||||
final List<LocalQuickFix> quickFixes = new ArrayList<LocalQuickFix>();
|
||||
if (sdk != null && PyPackageManager.getInstance(sdk).hasPip()) {
|
||||
if (manager.hasPip()) {
|
||||
quickFixes.add(new AddToRequirementsFix(module, packageName, LanguageLevel.forElement(importedExpression)));
|
||||
}
|
||||
quickFixes.add(new IgnoreRequirementFix(Collections.singleton(packageName)));
|
||||
@@ -211,7 +212,7 @@ public class PyPackageRequirementsInspection extends PyInspection {
|
||||
final Set<PyRequirement> results = new HashSet<PyRequirement>(requirements);
|
||||
final List<PyPackage> packages;
|
||||
try {
|
||||
packages = ((PyPackageManagerImpl) PyPackageManager.getInstance(sdk)).getPackagesFast();
|
||||
packages = PyPackageManager.getInstance(sdk).getPackagesFast();
|
||||
}
|
||||
catch (PyExternalProcessException e) {
|
||||
return null;
|
||||
@@ -242,8 +243,8 @@ public class PyPackageRequirementsInspection extends PyInspection {
|
||||
@Nullable
|
||||
private static List<PyRequirement> findUnsatisfiedRequirements(@NotNull Module module, @NotNull Sdk sdk,
|
||||
@NotNull Set<String> ignoredPackages) {
|
||||
final PyPackageManagerImpl manager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk);
|
||||
List<PyRequirement> requirements = PyPackageManagerImpl.getRequirements(module);
|
||||
final PyPackageManager manager = PyPackageManager.getInstance(sdk);
|
||||
List<PyRequirement> requirements = manager.getRequirements(module);
|
||||
if (requirements != null) {
|
||||
final List<PyPackage> packages;
|
||||
try {
|
||||
@@ -265,11 +266,11 @@ public class PyPackageRequirementsInspection extends PyInspection {
|
||||
}
|
||||
|
||||
private static void setRunningPackagingTasks(@NotNull Module module, boolean value) {
|
||||
module.putUserData(PyPackageManagerImpl.RUNNING_PACKAGING_TASKS, value);
|
||||
module.putUserData(PyPackageManager.RUNNING_PACKAGING_TASKS, value);
|
||||
}
|
||||
|
||||
private static boolean isRunningPackagingTasks(@NotNull Module module) {
|
||||
final Boolean value = module.getUserData(PyPackageManagerImpl.RUNNING_PACKAGING_TASKS);
|
||||
final Boolean value = module.getUserData(PyPackageManager.RUNNING_PACKAGING_TASKS);
|
||||
return value != null && value;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.SdkAdditionalData;
|
||||
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -46,7 +45,6 @@ import com.intellij.remote.RemoteSdkCredentials;
|
||||
import com.intellij.remote.VagrantNotStartedException;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.PathMappingSettings;
|
||||
import com.intellij.util.SystemProperties;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.net.HttpConfigurable;
|
||||
@@ -76,42 +74,19 @@ import java.util.List;
|
||||
public class PyPackageManagerImpl extends PyPackageManager {
|
||||
private static final Logger LOG = Logger.getInstance(PyPackageManagerImpl.class);
|
||||
|
||||
public static final int OK = 0;
|
||||
public static final int ERROR_NO_PIP = 2;
|
||||
public static final int ERROR_NO_SETUPTOOLS = 3;
|
||||
public static final int ERROR_INVALID_SDK = -1;
|
||||
public static final int ERROR_TOOL_NOT_FOUND = -2;
|
||||
public static final int ERROR_TIMEOUT = -3;
|
||||
public static final int ERROR_INVALID_OUTPUT = -4;
|
||||
public static final int ERROR_ACCESS_DENIED = -5;
|
||||
public static final int ERROR_EXECUTION = -6;
|
||||
|
||||
public static final int ERROR_VAGRANT_NOT_LAUNCHED = 101;
|
||||
public static final int ERROR_REMOTE_ACCESS = 102;
|
||||
|
||||
public static final String PACKAGE_PIP = "pip";
|
||||
public static final String PACKAGE_DISTRIBUTE = "distribute";
|
||||
public static final String PACKAGE_SETUPTOOLS = "setuptools";
|
||||
|
||||
public static final Key<Boolean> RUNNING_PACKAGING_TASKS = Key.create("PyPackageRequirementsInspection.RunningPackagingTasks");
|
||||
|
||||
private static final String PACKAGING_TOOL = "packaging_tool.py";
|
||||
private static final String VIRTUALENV = "virtualenv.py";
|
||||
private static final int TIMEOUT = 10 * 60 * 1000;
|
||||
|
||||
private static final String BUILD_DIR_OPTION = "--build-dir";
|
||||
public static final String USE_USER_SITE = "--user";
|
||||
|
||||
public static final String INSTALL = "install";
|
||||
public static final String UNINSTALL = "uninstall";
|
||||
public static final String UNTAR = "untar";
|
||||
|
||||
// Bundled versions of package management tools
|
||||
public static final String SETUPTOOLS_VERSION = "1.1.5";
|
||||
public static final String PIP_VERSION = "1.4.1";
|
||||
|
||||
public static final String SETUPTOOLS = PACKAGE_SETUPTOOLS + "-" + SETUPTOOLS_VERSION;
|
||||
public static final String PIP = PACKAGE_PIP + "-" + PIP_VERSION;
|
||||
private static final String LAUNCH_VAGRANT = "launchVagrant";
|
||||
|
||||
private List<PyPackage> myPackagesCache = null;
|
||||
@@ -267,17 +242,6 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getUserSite() {
|
||||
if (SystemInfo.isWindows) {
|
||||
final String appdata = System.getenv("APPDATA");
|
||||
return appdata + File.separator + "Python";
|
||||
}
|
||||
else {
|
||||
final String userHome = SystemProperties.getUserHome();
|
||||
return userHome + File.separator + ".local";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean cacheIsNotNull() {
|
||||
return myPackagesCache != null;
|
||||
@@ -312,7 +276,7 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
return myPackagesCache;
|
||||
}
|
||||
|
||||
public synchronized Set<PyPackage> getDependents(String pkg) throws PyExternalProcessException {
|
||||
public synchronized Set<PyPackage> getDependents(@NotNull PyPackage pkg) throws PyExternalProcessException {
|
||||
if (myDependenciesCache == null) {
|
||||
if (myExceptionCache != null) {
|
||||
throw myExceptionCache;
|
||||
@@ -320,7 +284,7 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
|
||||
loadPackages();
|
||||
}
|
||||
return myDependenciesCache.get(pkg);
|
||||
return myDependenciesCache.get(pkg.getName());
|
||||
}
|
||||
|
||||
public synchronized void loadPackages() throws PyExternalProcessException {
|
||||
@@ -421,7 +385,7 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
if (binaryFile != null) {
|
||||
final ProjectJdkImpl tmpSdk = new ProjectJdkImpl("", PythonSdkType.getInstance());
|
||||
tmpSdk.setHomePath(path);
|
||||
final PyPackageManagerImpl manager = new PyPackageManagerImpl(tmpSdk);
|
||||
final PyPackageManager manager = PyPackageManager.getInstance(tmpSdk);
|
||||
manager.installManagement(SETUPTOOLS);
|
||||
manager.installManagement(PIP);
|
||||
}
|
||||
@@ -430,9 +394,9 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static List<PyRequirement> getRequirements(@NotNull Module module) {
|
||||
public List<PyRequirement> getRequirements(@NotNull Module module) {
|
||||
// TODO: Cache requirements, clear cache on requirements.txt or setup.py updates
|
||||
List<PyRequirement> requirements = getRequirementsFromTxt(module);
|
||||
List<PyRequirement> requirements = PySdkUtil.getRequirementsFromTxt(module);
|
||||
if (requirements != null) {
|
||||
return requirements;
|
||||
}
|
||||
@@ -456,15 +420,6 @@ public class PyPackageManagerImpl extends PyPackageManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static List<PyRequirement> getRequirementsFromTxt(Module module) {
|
||||
final VirtualFile requirementsTxt = PyPackageUtil.findRequirementsTxt(module);
|
||||
if (requirementsTxt != null) {
|
||||
return PyRequirement.parse(requirementsTxt);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void clearCaches() {
|
||||
myPackagesCache = null;
|
||||
myDependenciesCache = null;
|
||||
|
||||
@@ -123,8 +123,7 @@ public class PyPackageManagerUI {
|
||||
throws PyExternalProcessException {
|
||||
Map<String, Set<PyPackage>> dependentPackages = new HashMap<String, Set<PyPackage>>();
|
||||
for (PyPackage pkg : packages) {
|
||||
final Set<PyPackage> dependents =
|
||||
((PyPackageManagerImpl)PyPackageManager.getInstance(sdk)).getDependents(pkg.getName());
|
||||
final Set<PyPackage> dependents = PyPackageManager.getInstance(sdk).getDependents(pkg);
|
||||
if (dependents != null && !dependents.isEmpty()) {
|
||||
for (PyPackage dependent : dependents) {
|
||||
if (!packages.contains(dependent)) {
|
||||
|
||||
@@ -15,13 +15,10 @@
|
||||
*/
|
||||
package com.jetbrains.python.packaging;
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -41,17 +38,4 @@ public class PyPackageManagersImpl extends PyPackageManagers {
|
||||
}
|
||||
return manager;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public List<PyRequirement> getRequirements(Module module) {
|
||||
return PyPackageManagerImpl.getRequirements(module);
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public List<PyRequirement> getRequirementsFromTxt(Module module) {
|
||||
return PyPackageManagerImpl.getRequirementsFromTxt(module);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.webcore.packaging.InstalledPackage;
|
||||
import com.intellij.webcore.packaging.InstalledPackagesPanel;
|
||||
import com.intellij.webcore.packaging.PackagesNotificationPanel;
|
||||
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;
|
||||
@@ -53,7 +54,7 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
|
||||
public void run() {
|
||||
final Sdk sdk = getSelectedSdk();
|
||||
if (sdk != null) {
|
||||
installManagementTool(sdk, PyPackageManagerImpl.SETUPTOOLS);
|
||||
installManagementTool(sdk, PyPackageManager.SETUPTOOLS);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -62,7 +63,7 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
|
||||
public void run() {
|
||||
final Sdk sdk = getSelectedSdk();
|
||||
if (sdk != null) {
|
||||
installManagementTool(sdk, PyPackageManagerImpl.PIP);
|
||||
installManagementTool(sdk, PyPackageManager.PIP);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -84,12 +85,12 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
|
||||
public void run() {
|
||||
PyExternalProcessException exc = null;
|
||||
try {
|
||||
PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(selectedSdk);
|
||||
myHasSetuptools = packageManager.findInstalledPackage(PyPackageManagerImpl.PACKAGE_SETUPTOOLS) != null;
|
||||
PyPackageManager packageManager = PyPackageManager.getInstance(selectedSdk);
|
||||
myHasSetuptools = packageManager.findInstalledPackage(PyPackageManager.PACKAGE_SETUPTOOLS) != null;
|
||||
if (!myHasSetuptools) {
|
||||
myHasSetuptools = packageManager.findInstalledPackage(PyPackageManagerImpl.PACKAGE_DISTRIBUTE) != null;
|
||||
myHasSetuptools = packageManager.findInstalledPackage(PyPackageManager.PACKAGE_DISTRIBUTE) != null;
|
||||
}
|
||||
myHasPip = packageManager.findInstalledPackage(PyPackageManagerImpl.PACKAGE_PIP) != null;
|
||||
myHasPip = packageManager.findInstalledPackage(PyPackageManager.PACKAGE_PIP) != null;
|
||||
}
|
||||
catch (PyExternalProcessException e) {
|
||||
exc = e;
|
||||
@@ -111,10 +112,10 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
|
||||
String text = null;
|
||||
if (externalProcessException != null) {
|
||||
final int retCode = externalProcessException.getRetcode();
|
||||
if (retCode == PyPackageManagerImpl.ERROR_NO_PIP) {
|
||||
if (retCode == PyPackageManager.ERROR_NO_PIP) {
|
||||
myHasPip = false;
|
||||
}
|
||||
else if (retCode == PyPackageManagerImpl.ERROR_NO_SETUPTOOLS) {
|
||||
else if (retCode == PyPackageManager.ERROR_NO_SETUPTOOLS) {
|
||||
myHasSetuptools = false;
|
||||
}
|
||||
else {
|
||||
@@ -177,7 +178,7 @@ 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 = PyPackageManagerUI.createDescription(exceptions, firstLine);
|
||||
@@ -199,14 +200,14 @@ public class PyInstalledPackagesPanel extends InstalledPackagesPanel {
|
||||
if (!myHasPip) 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;
|
||||
|
||||
@@ -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,7 +131,7 @@ 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();
|
||||
}
|
||||
catch (PyExternalProcessException e) {
|
||||
throw new IOException(e);
|
||||
@@ -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
|
||||
|
||||
@@ -50,7 +50,6 @@ import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.PlatformUtils;
|
||||
import com.jetbrains.python.packaging.PyExternalProcessException;
|
||||
import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.packaging.PyPackageManagerImpl;
|
||||
import com.jetbrains.python.packaging.PyPackageService;
|
||||
import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor;
|
||||
import com.jetbrains.python.ui.IdeaDialog;
|
||||
@@ -416,7 +415,7 @@ public class CreateVirtualEnvDialog extends IdeaDialog {
|
||||
String myPath;
|
||||
|
||||
public void run(@NotNull final ProgressIndicator indicator) {
|
||||
final PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(basicSdk);
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(basicSdk);
|
||||
try {
|
||||
indicator.setText("Creating virtual environment for " + basicSdk.getName());
|
||||
myPath = packageManager.createVirtualEnv(getDestination(), useGlobalSitePackages());
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.intellij.execution.process.ProcessOutput;
|
||||
import com.intellij.execution.util.ExecUtil;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
@@ -31,7 +32,10 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.remote.RemoteSdkAdditionalData;
|
||||
import com.intellij.util.SystemProperties;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.jetbrains.python.packaging.PyPackageUtil;
|
||||
import com.jetbrains.python.packaging.PyRequirement;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -39,7 +43,9 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* A more flexible cousin of SdkVersionUtil.
|
||||
@@ -167,6 +173,17 @@ public class PySdkUtil {
|
||||
return sdk != null && sdk.getSdkAdditionalData() instanceof RemoteSdkAdditionalData;
|
||||
}
|
||||
|
||||
public static String getUserSite() {
|
||||
if (SystemInfo.isWindows) {
|
||||
final String appdata = System.getenv("APPDATA");
|
||||
return appdata + File.separator + "Python";
|
||||
}
|
||||
else {
|
||||
final String userHome = SystemProperties.getUserHome();
|
||||
return userHome + File.separator + ".local";
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isElementInSkeletons(@NotNull final PsiElement element) {
|
||||
final PsiFile file = element.getContainingFile();
|
||||
if (file != null) {
|
||||
@@ -215,4 +232,13 @@ public class PySdkUtil {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static List<PyRequirement> getRequirementsFromTxt(Module module) {
|
||||
final VirtualFile requirementsTxt = PyPackageUtil.findRequirementsTxt(module);
|
||||
if (requirementsTxt != null) {
|
||||
return PyRequirement.parse(requirementsTxt);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,6 @@ import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.codeInsight.userSkeletons.PyUserSkeletonsUtil;
|
||||
import com.jetbrains.python.packaging.PyExternalProcessException;
|
||||
import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.packaging.PyPackageManagerImpl;
|
||||
import com.jetbrains.python.psi.resolve.PythonSdkPathCache;
|
||||
import com.jetbrains.python.remote.PythonRemoteInterpreterManager;
|
||||
import com.jetbrains.python.sdk.InvalidSdkException;
|
||||
@@ -349,7 +348,8 @@ public class PySkeletonRefresher {
|
||||
}
|
||||
if (PySdkUtil.isRemote(mySdk)) {
|
||||
try {
|
||||
((PyPackageManagerImpl)PyPackageManager.getInstance(mySdk)).loadPackages();
|
||||
// Force loading packages
|
||||
PyPackageManager.getInstance(mySdk).getPackages();
|
||||
}
|
||||
catch (PyExternalProcessException e) {
|
||||
// ignore - already logged
|
||||
|
||||
@@ -25,7 +25,7 @@ import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.jetbrains.python.packaging.PyPIPackageUtil;
|
||||
import com.jetbrains.python.packaging.PyPackageManagerImpl;
|
||||
import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.packaging.PyRequirement;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -46,12 +46,12 @@ public class PyPackageUsagesCollector extends AbstractApplicationUsagesCollector
|
||||
public Set<UsageDescriptor> getProjectUsages(@NotNull Project project) throws CollectUsagesException {
|
||||
final Set<UsageDescriptor> result = new HashSet<UsageDescriptor>();
|
||||
for(final Module m: ModuleManager.getInstance(project).getModules()) {
|
||||
Sdk pythonSdk = PythonSdkType.findPythonSdk(m);
|
||||
final Sdk pythonSdk = PythonSdkType.findPythonSdk(m);
|
||||
if (pythonSdk != null) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<PyRequirement> requirements = PyPackageManagerImpl.getRequirements(m);
|
||||
List<PyRequirement> requirements = PyPackageManager.getInstance(pythonSdk).getRequirements(m);
|
||||
if (requirements != null) {
|
||||
Collection<String> packages = new HashSet<String>(PyPIPackageUtil.INSTANCE.getPackageNames());
|
||||
for (PyRequirement requirement : requirements) {
|
||||
|
||||
@@ -35,7 +35,6 @@ import com.intellij.util.ui.update.Update;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.packaging.PyExternalProcessException;
|
||||
import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.packaging.PyPackageManagerImpl;
|
||||
import com.jetbrains.python.sdk.PySdkUtil;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -131,7 +130,7 @@ public class VFSTestFrameworkListener implements ApplicationComponent {
|
||||
LOG.info("Searching test runner in empty sdk");
|
||||
return null;
|
||||
}
|
||||
final PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk);
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(sdk);
|
||||
try {
|
||||
return packageManager.findInstalledPackage(testPackageName) != null;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ import com.intellij.webcore.packaging.PackageVersionComparator;
|
||||
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.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyFile;
|
||||
import com.jetbrains.python.psi.PyFunction;
|
||||
@@ -97,7 +96,7 @@ public class PyTestConfigurationProducer extends PythonTestConfigurationProducer
|
||||
if (pyFunction != null) {
|
||||
keywords = pyFunction.getName();
|
||||
if (pyClass != null) {
|
||||
final PyPackageManagerImpl packageManager = (PyPackageManagerImpl)PyPackageManager.getInstance(sdk);
|
||||
final PyPackageManager packageManager = PyPackageManager.getInstance(sdk);
|
||||
try {
|
||||
final PyPackage pytestPackage = packageManager.findInstalledPackage("pytest");
|
||||
if (pytestPackage != null && PackageVersionComparator.VERSION_COMPARATOR.compare(pytestPackage.getVersion(), "2.3.3") >= 0) {
|
||||
|
||||
+10
-10
@@ -43,11 +43,11 @@ public class PyPackagingTest extends PyEnvTestCase {
|
||||
final Sdk sdk = createTempSdk(sdkHome, SdkCreationType.EMPTY_SDK);
|
||||
List<PyPackage> packages = null;
|
||||
try {
|
||||
packages = ((PyPackageManagerImpl)PyPackageManager.getInstance(sdk)).getPackages();
|
||||
packages = PyPackageManager.getInstance(sdk).getPackages();
|
||||
}
|
||||
catch (PyExternalProcessException e) {
|
||||
final int retcode = e.getRetcode();
|
||||
if (retcode != PyPackageManagerImpl.ERROR_NO_PIP && retcode != PyPackageManagerImpl.ERROR_NO_SETUPTOOLS) {
|
||||
if (retcode != PyPackageManager.ERROR_NO_PIP && retcode != PyPackageManager.ERROR_NO_SETUPTOOLS) {
|
||||
fail(String.format("Error for interpreter '%s': %s", sdk.getHomePath(), e.getMessage()));
|
||||
}
|
||||
}
|
||||
@@ -74,21 +74,21 @@ public class PyPackagingTest extends PyEnvTestCase {
|
||||
}
|
||||
final File tempDir = FileUtil.createTempDirectory(getTestName(false), null);
|
||||
final File venvDir = new File(tempDir, "venv");
|
||||
final String venvSdkHome = ((PyPackageManagerImpl)PyPackageManagerImpl.getInstance(sdk)).createVirtualEnv(venvDir.toString(),
|
||||
false);
|
||||
final String venvSdkHome = PyPackageManager.getInstance(sdk).createVirtualEnv(venvDir.toString(),
|
||||
false);
|
||||
final Sdk venvSdk = createTempSdk(venvSdkHome, SdkCreationType.EMPTY_SDK);
|
||||
assertNotNull(venvSdk);
|
||||
assertTrue(PythonSdkType.isVirtualEnv(venvSdk));
|
||||
assertInstanceOf(PythonSdkFlavor.getPlatformIndependentFlavor(venvSdk.getHomePath()), VirtualEnvSdkFlavor.class);
|
||||
final List<PyPackage> packages = ((PyPackageManagerImpl)PyPackageManagerImpl.getInstance(venvSdk)).getPackages();
|
||||
final List<PyPackage> packages = PyPackageManager.getInstance(venvSdk).getPackages();
|
||||
final PyPackage setuptools = findPackage("setuptools", packages);
|
||||
assertNotNull(setuptools);
|
||||
assertEquals("setuptools", setuptools.getName());
|
||||
assertEquals(PyPackageManagerImpl.SETUPTOOLS_VERSION, setuptools.getVersion());
|
||||
assertEquals(PyPackageManager.SETUPTOOLS_VERSION, setuptools.getVersion());
|
||||
final PyPackage pip = findPackage("pip", packages);
|
||||
assertNotNull(pip);
|
||||
assertEquals("pip", pip.getName());
|
||||
assertEquals(PyPackageManagerImpl.PIP_VERSION, pip.getVersion());
|
||||
assertEquals(PyPackageManager.PIP_VERSION, pip.getVersion());
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
@@ -109,10 +109,10 @@ public class PyPackagingTest extends PyEnvTestCase {
|
||||
try {
|
||||
final File tempDir = FileUtil.createTempDirectory(getTestName(false), null);
|
||||
final File venvDir = new File(tempDir, "venv");
|
||||
final String venvSdkHome = ((PyPackageManagerImpl)PyPackageManager.getInstance(sdk)).createVirtualEnv(venvDir.getPath(), false);
|
||||
final String venvSdkHome = PyPackageManager.getInstance(sdk).createVirtualEnv(venvDir.getPath(), false);
|
||||
final Sdk venvSdk = createTempSdk(venvSdkHome, SdkCreationType.EMPTY_SDK);
|
||||
assertNotNull(venvSdk);
|
||||
final PyPackageManagerImpl manager = (PyPackageManagerImpl)PyPackageManager.getInstance(venvSdk);
|
||||
final PyPackageManager manager = PyPackageManager.getInstance(venvSdk);
|
||||
final List<PyPackage> packages1 = manager.getPackages();
|
||||
// TODO: Install Markdown from a local file
|
||||
manager.install(list(PyRequirement.fromString("Markdown<2.2"),
|
||||
@@ -124,7 +124,7 @@ public class PyPackagingTest extends PyEnvTestCase {
|
||||
final PyPackage pip1 = findPackage("pip", packages1);
|
||||
assertNotNull(pip1);
|
||||
assertEquals("pip", pip1.getName());
|
||||
assertEquals(PyPackageManagerImpl.PIP_VERSION, pip1.getVersion());
|
||||
assertEquals(PyPackageManager.PIP_VERSION, pip1.getVersion());
|
||||
manager.uninstall(list(pip1));
|
||||
final List<PyPackage> packages3 = manager.getPackages();
|
||||
final PyPackage pip2 = findPackage("pip", packages3);
|
||||
|
||||
Reference in New Issue
Block a user