From 538356df0a8f751d9209bc5dc2e43fab18b57479 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Mon, 25 Jan 2016 12:12:32 +0300 Subject: [PATCH] PY-6801 Remove pypi repository Remove repository from UI --- python/helpers/packaging_tool.py | 50 +++++++++++++++++++ .../python/packaging/PyPIPackageUtil.java | 5 +- .../packaging/PyPackageManagerImpl.java | 9 +++- .../python/packaging/PyPackageService.java | 16 ++++-- .../ui/PyPackageManagementService.java | 44 +++++++++++++--- 5 files changed, 111 insertions(+), 13 deletions(-) diff --git a/python/helpers/packaging_tool.py b/python/helpers/packaging_tool.py index 2dbcdf0cbb93..4e44c56995f1 100644 --- a/python/helpers/packaging_tool.py +++ b/python/helpers/packaging_tool.py @@ -51,6 +51,52 @@ def do_list(): sys.stdout.flush() +def do_get_versions(urls, req): + if req is not None: + for version in VersionsFinder(urls).get_versions(req): + if len(version) > 2: + sys.stdout.write(version[2] + chr(10)) + sys.stdout.flush() + + + +def do_get_latest_version(urls, req): + try: + from pip.index import PackageFinder, Link + except ImportError: + error_no_pip() + + class VersionsFinder(PackageFinder): + def __init__(self, index_urls, *args, **kwargs): + super(VersionsFinder, self).__init__([], index_urls, *args, **kwargs) + + def get_versions(self, req): + class Req: + def __init__(self, name): + self.name = name + + def mkurl_pypi_url(url): + loc = os.path.join(url, req) + if not loc.endswith('/'): + loc += '/' + return loc + + locations = [mkurl_pypi_url(url) for url in self.index_urls] + self.find_links + locations = [Link(url, trusted=True) for url in locations] + + versions = [] + for page in self._get_pages(locations, Req(req)): + versions.extend(self._package_versions(page.links, req.lower())) + + return sorted(list(versions), reverse=True) + if req is not None: + for version in VersionsFinder(urls).get_versions(req): + if len(version) > 2: + sys.stdout.write(version[2] + chr(10)) + sys.stdout.flush() + return + return "" + def do_install(pkgs): try: import pip @@ -115,6 +161,10 @@ def main(): if len(sys.argv) != 2: usage() do_list() + elif cmd == 'latestVersion': + if len(sys.argv) < 4: + usage() + do_get_latest_version(sys.argv[3:], sys.argv[2]) elif cmd == 'install': if len(sys.argv) < 2: usage() diff --git a/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java b/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java index 97a81b355cb7..402a2fdd9753 100644 --- a/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java +++ b/python/src/com/jetbrains/python/packaging/PyPIPackageUtil.java @@ -54,8 +54,9 @@ import java.util.regex.Pattern; @SuppressWarnings("UseOfObsoleteCollectionType") public class PyPIPackageUtil { public static final Logger LOG = Logger.getInstance(PyPIPackageUtil.class.getName()); - @NonNls public static final String PYPI_URL = "https://pypi.python.org/pypi"; - @NonNls public static final String PYPI_LIST_URL = "https://pypi.python.org/pypi?%3Aaction=index"; + public static final String PYPI_HOST = "https://pypi.python.org"; + @NonNls public static final String PYPI_URL = PYPI_HOST + "/pypi"; + @NonNls public static final String PYPI_LIST_URL = PYPI_HOST + "/pypi?%3Aaction=index"; public static Map PACKAGES_TOPLEVEL = new HashMap(); diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index c77b244e8e1c..332477b18943 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -288,6 +288,13 @@ public class PyPackageManagerImpl extends PyPackageManager { } } + //@NotNull + //public String fetchLatestVersion(InstalledPackage pkg) throws ExecutionException { + // final ArrayList arguments = Lists.newArrayList("latestVersion", pkg.getName()); + // arguments.addAll(PyPackageService.getInstance().additionalRepositories); + // return getHelperResult(PACKAGING_TOOL, arguments, false, false, null); + //} + @NotNull protected List getPackages() throws ExecutionException { final String output; @@ -589,4 +596,4 @@ public class PyPackageManagerImpl extends PyPackageManager { } } } -} +} \ No newline at end of file diff --git a/python/src/com/jetbrains/python/packaging/PyPackageService.java b/python/src/com/jetbrains/python/packaging/PyPackageService.java index f101b32e7db4..d1e03125a625 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageService.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageService.java @@ -38,6 +38,7 @@ public class PyPackageService implements public List additionalRepositories = new ArrayList(); public Map PY_PACKAGES = ContainerUtil.newConcurrentMap(); public String virtualEnvBasePath; + public Boolean PYPI_REMOVED = false; public long LAST_TIME_CHECKED = 0; @@ -55,13 +56,22 @@ public class PyPackageService implements sdkToUsersite.put(sdk, useUsersite); } - public void addRepository(String repository) { - additionalRepositories.add(repository); + public void addRepository(final String repository) { + if (repository == null) return; + if (repository.startsWith(PyPIPackageUtil.PYPI_HOST)) { + PYPI_REMOVED = false; + } + else { + additionalRepositories.add(repository); + } } - public void removeRepository(String repository) { + public void removeRepository(final String repository) { if (additionalRepositories.contains(repository)) additionalRepositories.remove(repository); + else if (repository.startsWith(PyPIPackageUtil.PYPI_HOST)) { + PYPI_REMOVED = true; + } } public boolean useUserSite(String sdk) { diff --git a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java index 4e829eea9767..6f500df4e02b 100644 --- a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java +++ b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java @@ -43,6 +43,7 @@ import java.util.regex.Pattern; /** * @author yole */ +@SuppressWarnings("UseOfObsoleteCollectionType") public class PyPackageManagementService extends PackageManagementService { @NotNull private static final Pattern PATTERN_ERROR_LINE = Pattern.compile(".*error:.*", Pattern.CASE_INSENSITIVE); @@ -61,19 +62,20 @@ public class PyPackageManagementService extends PackageManagementService { @Override public List getAllRepositories() { + final PyPackageService packageService = PyPackageService.getInstance(); List result = new ArrayList(); - result.add(PyPIPackageUtil.PYPI_URL); - result.addAll(PyPackageService.getInstance().additionalRepositories); + if (!packageService.PYPI_REMOVED) result.add(PyPIPackageUtil.PYPI_URL); + result.addAll(packageService.additionalRepositories); return result; } @Override - public void addRepository(String repositoryUrl) { + public void addRepository(final String repositoryUrl) { PyPackageService.getInstance().addRepository(repositoryUrl); } @Override - public void removeRepository(String repositoryUrl) { + public void removeRepository(final String repositoryUrl) { PyPackageService.getInstance().removeRepository(repositoryUrl); } @@ -236,9 +238,12 @@ public class PyPackageManagementService extends PackageManagementService { PyPIPackageUtil.INSTANCE.usePackageReleases(packageName, new AsyncCallback() { @Override public void handleResult(Object result, URL url, String method) { + //noinspection unchecked final List releases = (List)result; - PyPIPackageUtil.INSTANCE.addPackageReleases(packageName, releases); - consumer.consume(releases); + if (releases != null) { + PyPIPackageUtil.INSTANCE.addPackageReleases(packageName, releases); + consumer.consume(releases); + } } @Override @@ -371,4 +376,29 @@ public class PyPackageManagementService extends PackageManagementService { } return null; } -} + + /*@Override + public void updatePackage(@NotNull InstalledPackage installedPackage, + @Nullable String version, + @NotNull Listener listener) { + installPackage(new RepoPackage(installedPackage.getName(), null *//* TODO? *//*), null, true, null, listener, false); + } + + @Override + public boolean shouldFetchLatestVersionsForOnlyInstalledPackages() { + final List repositories = PyPackageService.getInstance().additionalRepositories; + return repositories.size() > 1 || (repositories.size() == 1 && !repositories.get(0).equals(PyPIPackageUtil.PYPI_LIST_URL)); + } + + @Override + public void fetchLatestVersion(@NotNull InstalledPackage pkg, @NotNull CatchingConsumer consumer) { + final String version; + try { + version = PyPackageManager.getInstance(mySdk).fetchLatestVersion(pkg); + consumer.consume(version); + } + catch (ExecutionException ignored) { + + } + }*/ +} \ No newline at end of file