From aedf4fc8fc41e2a982d7ecb14e8a53a43adddc72 Mon Sep 17 00:00:00 2001 From: Frederik Rietdijk Date: Wed, 16 Oct 2019 11:41:17 +0200 Subject: [PATCH] Revert "update-python-libraries: use version key for latest release (#68857)" This broke support for --target. This reverts commit e8c29fa77c2d08ecbc93754b681f2902b53bef79. --- .../update-python-libraries.py | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py b/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py index 3dc973fba39..e4a79d0c428 100755 --- a/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py +++ b/pkgs/development/interpreters/python/update-python-libraries/update-python-libraries.py @@ -116,11 +116,45 @@ SEMVER = { } +def _determine_latest_version(current_version, target, versions): + """Determine latest version, given `target`. + """ + current_version = Version(current_version) + + def _parse_versions(versions): + for v in versions: + try: + yield Version(v) + except InvalidVersion: + pass + + versions = _parse_versions(versions) + + index = SEMVER[target] + + ceiling = list(current_version[0:index]) + if len(ceiling) == 0: + ceiling = None + else: + ceiling[-1]+=1 + ceiling = Version(".".join(map(str, ceiling))) + + # We do not want prereleases + versions = SpecifierSet(prereleases=PRERELEASES).filter(versions) + + if ceiling is not None: + versions = SpecifierSet(f"<{ceiling}").filter(versions) + + return (max(sorted(versions))).raw_version + + def _get_latest_version_pypi(package, extension, current_version, target): """Get latest version and hash from PyPI.""" url = "{}/{}/json".format(INDEX, package) json = _fetch_page(url) - version = json['info']['version'] + + versions = json['releases'].keys() + version = _determine_latest_version(current_version, target, versions) try: releases = json['releases'][version] @@ -132,7 +166,6 @@ def _get_latest_version_pypi(package, extension, current_version, target): sha256 = release['digests']['sha256'] break else: - logging.error("Release not found for extension: {}".format(extension)) sha256 = None return version, sha256