From aac3863752310486eeaec294a5c828855c4ba4b5 Mon Sep 17 00:00:00 2001 From: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Date: Fri, 10 Mar 2023 23:30:53 -0800 Subject: [PATCH] stubsabot: fix legacy version parsing (#9866) New `packaging` is strict and doesn't like paramiko's pokemon versioning scheme from 2004 Fixes #9865 --- scripts/stubsabot.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/stubsabot.py b/scripts/stubsabot.py index bbf638573..b4dfecc43 100644 --- a/scripts/stubsabot.py +++ b/scripts/stubsabot.py @@ -82,6 +82,17 @@ VersionString: TypeAlias = str ReleaseDownload: TypeAlias = dict[str, Any] +def _best_effort_version(version: VersionString) -> packaging.version.Version: + try: + return packaging.version.Version(version) + except packaging.version.InvalidVersion: + # packaging.version.Version no longer parses legacy versions + try: + return packaging.version.Version(version.replace("-", "+")) + except packaging.version.InvalidVersion: + return packaging.version.Version("0") + + @dataclass class PypiInfo: distribution: str @@ -104,7 +115,7 @@ class PypiInfo: return self.get_release(version=self.info["version"]) def releases_in_descending_order(self) -> Iterator[PypiReleaseDownload]: - for version in sorted(self.releases, key=packaging.version.Version, reverse=True): + for version in sorted(self.releases, key=_best_effort_version, reverse=True): yield self.get_release(version=version)