From b1a94687c6f866b7e306b0ae9ccc2b145bfb93db Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Sat, 28 Jan 2023 16:08:27 +0000 Subject: [PATCH 1/3] Improve stubsabot logic for finding the first release with a `py.typed` file --- scripts/stubsabot.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/stubsabot.py b/scripts/stubsabot.py index 574a7361153c..6e448e40b8a7 100644 --- a/scripts/stubsabot.py +++ b/scripts/stubsabot.py @@ -174,7 +174,22 @@ async def find_first_release_with_py_typed(pypi_info: PypiInfo, *, session: aioh release_iter = pypi_info.releases_in_descending_order() while await release_contains_py_typed(release := next(release_iter), session=session): first_release_with_py_typed = release - return first_release_with_py_typed + first_version_with_py_typed = first_release_with_py_typed.version + if not first_version_with_py_typed.is_prerelease: + return first_release_with_py_typed + normalised_versions_to_version_strings = { + packaging.version.Version(version_string): version_string for version_string in pypi_info.releases + } + # We should be able to safely count on this being a non-empty iterable, + # since this function hopefully won't be called + # unless a non-prerelease version has been released + # that has a py.typed file + first_nonprerelease_version_with_py_typed = min( + version + for version in normalised_versions_to_version_strings + if version > first_version_with_py_typed and not version.is_prerelease + ) + return pypi_info.get_release(version=normalised_versions_to_version_strings[first_nonprerelease_version_with_py_typed]) def _check_spec(updated_spec: str, version: packaging.version.Version) -> str: From 789e4ace29183f9f65d322d39e9a3f1cbdd0e458 Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Sat, 28 Jan 2023 17:44:02 +0000 Subject: [PATCH 2/3] Revert "Improve stubsabot logic for finding the first release with a `py.typed` file" This reverts commit b1a94687c6f866b7e306b0ae9ccc2b145bfb93db. --- scripts/stubsabot.py | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/scripts/stubsabot.py b/scripts/stubsabot.py index 6e448e40b8a7..574a7361153c 100644 --- a/scripts/stubsabot.py +++ b/scripts/stubsabot.py @@ -174,22 +174,7 @@ async def find_first_release_with_py_typed(pypi_info: PypiInfo, *, session: aioh release_iter = pypi_info.releases_in_descending_order() while await release_contains_py_typed(release := next(release_iter), session=session): first_release_with_py_typed = release - first_version_with_py_typed = first_release_with_py_typed.version - if not first_version_with_py_typed.is_prerelease: - return first_release_with_py_typed - normalised_versions_to_version_strings = { - packaging.version.Version(version_string): version_string for version_string in pypi_info.releases - } - # We should be able to safely count on this being a non-empty iterable, - # since this function hopefully won't be called - # unless a non-prerelease version has been released - # that has a py.typed file - first_nonprerelease_version_with_py_typed = min( - version - for version in normalised_versions_to_version_strings - if version > first_version_with_py_typed and not version.is_prerelease - ) - return pypi_info.get_release(version=normalised_versions_to_version_strings[first_nonprerelease_version_with_py_typed]) + return first_release_with_py_typed def _check_spec(updated_spec: str, version: packaging.version.Version) -> str: From 35f1e1c45dfa2c89019ddb00272eeb1c90f7b578 Mon Sep 17 00:00:00 2001 From: AlexWaygood Date: Sat, 28 Jan 2023 17:47:49 +0000 Subject: [PATCH 3/3] Take 2 (thank you Jelle) --- scripts/stubsabot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/stubsabot.py b/scripts/stubsabot.py index 574a7361153c..a9a19e333c2b 100644 --- a/scripts/stubsabot.py +++ b/scripts/stubsabot.py @@ -173,7 +173,8 @@ async def release_contains_py_typed(release_to_download: PypiReleaseDownload, *, async def find_first_release_with_py_typed(pypi_info: PypiInfo, *, session: aiohttp.ClientSession) -> PypiReleaseDownload: release_iter = pypi_info.releases_in_descending_order() while await release_contains_py_typed(release := next(release_iter), session=session): - first_release_with_py_typed = release + if not release.version.is_prerelease: + first_release_with_py_typed = release return first_release_with_py_typed