diff --git a/src/poetry/repositories/http.py b/src/poetry/repositories/http.py index bbfcb8b5c0f..6c08473e147 100644 --- a/src/poetry/repositories/http.py +++ b/src/poetry/repositories/http.py @@ -15,6 +15,7 @@ from poetry.core.packages.dependency import Dependency from poetry.core.packages.utils.link import Link +from poetry.core.semver.helpers import parse_constraint from poetry.core.version.markers import parse_marker from poetry.repositories.cached import CachedRepository @@ -148,6 +149,14 @@ def _get_info_from_urls(self, urls: dict[str, list[str]]) -> PackageInfo: info = self._get_info_from_wheel(universal_python2_wheel) py3_info = self._get_info_from_wheel(universal_python3_wheel) + + if info.requires_python or py3_info.requires_python: + info.requires_python = str( + parse_constraint(info.requires_python or "^2.7").union( + parse_constraint(py3_info.requires_python or "^3") + ) + ) + if py3_info.requires_dist: if not info.requires_dist: info.requires_dist = py3_info.requires_dist diff --git a/tests/repositories/fixtures/legacy/poetry-test-py2-py3-metadata-merge.html b/tests/repositories/fixtures/legacy/poetry-test-py2-py3-metadata-merge.html new file mode 100644 index 00000000000..7b43db0f21e --- /dev/null +++ b/tests/repositories/fixtures/legacy/poetry-test-py2-py3-metadata-merge.html @@ -0,0 +1,11 @@ + + + + Links for poetry-test-py2-py3-metadata-merge + + +

Links for ipython

+ poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl
+ poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl
+ + diff --git a/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl new file mode 100644 index 00000000000..255fcf7dab7 Binary files /dev/null and b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl differ diff --git a/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl new file mode 100644 index 00000000000..c4f890baafb Binary files /dev/null and b/tests/repositories/fixtures/pypi.org/dists/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl differ diff --git a/tests/repositories/test_legacy_repository.py b/tests/repositories/test_legacy_repository.py index f1f44841fda..bb0c33f6a76 100644 --- a/tests/repositories/test_legacy_repository.py +++ b/tests/repositories/test_legacy_repository.py @@ -295,6 +295,16 @@ def test_get_package_from_both_py2_and_py3_specific_wheels(): assert str(required[5].marker) == 'sys_platform != "win32"' +def test_get_package_from_both_py2_and_py3_specific_wheels_python_constraint(): + repo = MockRepository() + + package = repo.package("poetry-test-py2-py3-metadata-merge", "0.1.0") + + assert package.name == "poetry-test-py2-py3-metadata-merge" + assert package.version.text == "0.1.0" + assert package.python_versions == ">=2.7,<2.8 || >=3.7,<4.0" + + def test_get_package_with_dist_and_universal_py3_wheel(): repo = MockRepository()