From f6eb93d0d2e6c494677a5f78234e50df2751337d Mon Sep 17 00:00:00 2001 From: n-dusan Date: Fri, 14 Mar 2025 16:27:52 +0000 Subject: [PATCH 1/5] fix: fix sort by using semver key Previous sort did not work reliably, since sort was not using the packaging.Version semver sort key. --- upgrade/scripts/find_compatible_versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upgrade/scripts/find_compatible_versions.py b/upgrade/scripts/find_compatible_versions.py index 0508e4b..d1af236 100644 --- a/upgrade/scripts/find_compatible_versions.py +++ b/upgrade/scripts/find_compatible_versions.py @@ -55,7 +55,7 @@ def get_compatible_upgrade_versions( ) logging.debug(f"Found compatible versions: {compatible_versions}") - return sorted(compatible_versions, reverse=True) + return sorted(compatible_versions, reverse=True, key=Version) def get_installed_version(requirements_obj: Any, venv_executable: str) -> Optional[str]: From 7d0716e7cb4c0f2a4862c9aa9301033bd8e7b549 Mon Sep 17 00:00:00 2001 From: n-dusan Date: Fri, 14 Mar 2025 16:33:42 +0000 Subject: [PATCH 2/5] fix: add packaging as dependency, do not use pip vendored imports - Pip vendored imports are generally discouraged, mainly because their behaviour varies from currently installed pip version. A much more correct solution is to install the vendored packages. - To resolve, add packaging>=24.1 as a dependency and fix imports --- setup.cfg | 1 + upgrade/scripts/find_compatible_versions.py | 6 +++--- upgrade/scripts/requirements.py | 2 +- upgrade/scripts/upgrade_python_package.py | 4 ++-- upgrade/tests/upgrade_package/test_filter_versions.py | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/setup.cfg b/setup.cfg index 7340b80..c22908a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -26,6 +26,7 @@ classifiers = install_requires = lxml >= 4.9 requests == 2.* + packaging >= 24.1 packages = upgrade.scripts zip_safe = False include_package_data = True diff --git a/upgrade/scripts/find_compatible_versions.py b/upgrade/scripts/find_compatible_versions.py index d1af236..d09955d 100644 --- a/upgrade/scripts/find_compatible_versions.py +++ b/upgrade/scripts/find_compatible_versions.py @@ -6,9 +6,9 @@ from urllib.parse import urljoin import lxml.etree as et -import pip._vendor.requests as requests -from pip._vendor.packaging.utils import parse_wheel_filename -from pip._vendor.packaging.version import Version +import requests as requests +from packaging.utils import parse_wheel_filename +from packaging.version import Version from upgrade.scripts.requirements import ( filter_versions, diff --git a/upgrade/scripts/requirements.py b/upgrade/scripts/requirements.py index c8d4bee..8775d77 100644 --- a/upgrade/scripts/requirements.py +++ b/upgrade/scripts/requirements.py @@ -67,7 +67,7 @@ def to_requirements_obj(requirements: str) -> Any: we import the vendored version. This way we guarantee that the packaging APIs are matching pip's behavior exactly. """ - from pip._vendor.packaging.requirements import Requirement + from packaging.requirements import Requirement return Requirement(requirements) except Exception as e: diff --git a/upgrade/scripts/upgrade_python_package.py b/upgrade/scripts/upgrade_python_package.py index 027704b..68776fd 100644 --- a/upgrade/scripts/upgrade_python_package.py +++ b/upgrade/scripts/upgrade_python_package.py @@ -7,8 +7,8 @@ from importlib import util from pathlib import Path -from pip._vendor.packaging.specifiers import SpecifierSet -from pip._vendor.packaging.utils import parse_wheel_filename +from packaging.specifiers import SpecifierSet +from packaging.utils import parse_wheel_filename from upgrade.scripts.exceptions import PipFormatDecodeFailed from upgrade.scripts.requirements import filter_versions diff --git a/upgrade/tests/upgrade_package/test_filter_versions.py b/upgrade/tests/upgrade_package/test_filter_versions.py index 49b305a..f94201a 100644 --- a/upgrade/tests/upgrade_package/test_filter_versions.py +++ b/upgrade/tests/upgrade_package/test_filter_versions.py @@ -1,5 +1,5 @@ import pytest -from pip._vendor.packaging.specifiers import SpecifierSet +from packaging.specifiers import SpecifierSet from upgrade.scripts.requirements import filter_versions From 3ac22d19322451cfd39b3b2e87a72d4c1a294606 Mon Sep 17 00:00:00 2001 From: n-dusan Date: Fri, 14 Mar 2025 16:37:24 +0000 Subject: [PATCH 3/5] fix(test): add setuptools as install --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index c22908a..8f01d9b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -42,6 +42,7 @@ test = flake8 pytest mock + setuptools [bdist_wheel] From b26674a7ef274be91ffcb8ab7d90fc51fb37c85c Mon Sep 17 00:00:00 2001 From: n-dusan Date: Fri, 14 Mar 2025 16:52:27 +0000 Subject: [PATCH 4/5] fix: upgrade pip, setuptools, wheel in venv management tests These test relied on older versions of setuptools,pip and wheel dependencies --- .github/workflows/ci.yml | 2 +- upgrade/tests/manage_venv/conftest.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5db7792..ff18dc9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: architecture: x64 - name: Install dependencies run: | - python -m pip install --upgrade pip + python -m pip install --upgrade pip setuptools wheel pip install -e .[test] - name: Test with pytest run: | diff --git a/upgrade/tests/manage_venv/conftest.py b/upgrade/tests/manage_venv/conftest.py index 749fe3d..397ce98 100644 --- a/upgrade/tests/manage_venv/conftest.py +++ b/upgrade/tests/manage_venv/conftest.py @@ -28,6 +28,7 @@ def _create_venv(path, version, venv_name=None): venv_path = str(Path(path, venv_name)) run(original_executable, "-m", "venv", venv_path) venv_executable = get_venv_executable(venv_path) + run(venv_executable, "-m", "pip", "install", "--upgrade", "pip", "setuptools", "wheel") run( venv_executable, "-m", From 775337fb88b33ffb54b420da42abd692d474e48b Mon Sep 17 00:00:00 2001 From: n-dusan Date: Fri, 14 Mar 2025 16:58:43 +0000 Subject: [PATCH 5/5] chore: changelog --- CHANGELOG.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a2873e..cb76406 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,22 @@ and this project adheres to a _modified_ form of _[Semantic Versioning][semver]_ ### Removed +## [0.8.1] + +### Added + +### Changed + +- Use regular imports for `packaging` and `requests` library instead of pip vendored imports ([#23]) + +### Fixed + +- Fix `find_compatible_versions` sort to use semver sort ([#23]) + +[#23]: https://github.com/openlawlibrary/upgrade-python-package/pull/23 + +### Removed + ## [0.8.0] ### Added @@ -183,7 +199,8 @@ and this project adheres to a _modified_ form of _[Semantic Versioning][semver]_ [#5]: https://github.com/openlawlibrary/upgrade-python-package/pull/5 [#6]: https://github.com/openlawlibrary/upgrade-python-package/pull/6 -[Unreleased]: https://github.com/openlawlibrary/upgrade-python-package/compare/0.8.0...HEAD +[Unreleased]: https://github.com/openlawlibrary/upgrade-python-package/compare/0.8.1...HEAD +[0.8.1]: https://github.com/openlawlibrary/upgrade-python-package/compare/0.8.0...0.8.1 [0.8.0]: https://github.com/openlawlibrary/upgrade-python-package/compare/0.7.3...0.8.0 [0.7.3]: https://github.com/openlawlibrary/upgrade-python-package/compare/0.7.2...0.7.3 [0.7.2]: https://github.com/openlawlibrary/upgrade-python-package/compare/0.7.1...0.7.2