Commit d872f2bb by Arun Babu Neelicattu Committed by Bjorn Neergaard

repos: ensure wheel python constraints are merged

This change ensures that when http repositories inspect package
metadata from py2 and py3 wheels, python version requirements are
merged. Without this change, in cases where these wheels have different
python constraints, attempting to lock these packages will lead to
solver errors.
parent c4e1b218
...@@ -15,6 +15,7 @@ import requests ...@@ -15,6 +15,7 @@ import requests
from poetry.core.packages.dependency import Dependency from poetry.core.packages.dependency import Dependency
from poetry.core.packages.utils.link import Link 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.core.version.markers import parse_marker
from poetry.repositories.cached import CachedRepository from poetry.repositories.cached import CachedRepository
...@@ -148,6 +149,14 @@ class HTTPRepository(CachedRepository, ABC): ...@@ -148,6 +149,14 @@ class HTTPRepository(CachedRepository, ABC):
info = self._get_info_from_wheel(universal_python2_wheel) info = self._get_info_from_wheel(universal_python2_wheel)
py3_info = self._get_info_from_wheel(universal_python3_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 py3_info.requires_dist:
if not info.requires_dist: if not info.requires_dist:
info.requires_dist = py3_info.requires_dist info.requires_dist = py3_info.requires_dist
......
<!DOCTYPE html>
<html>
<head>
<title>Links for poetry-test-py2-py3-metadata-merge</title>
</head>
<body>
<h1>Links for ipython</h1>
<a href="https://files.pythonhosted.org/packages/52/19/poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl">poetry_test_py2_py3_metadata_merge-0.1.0-py2-none-any.whl</a><br/>
<a href="https://files.pythonhosted.org/packages/c7/b6/poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl">poetry_test_py2_py3_metadata_merge-0.1.0-py3-none-any.whl</a><br/>
</body>
</html>
...@@ -295,6 +295,16 @@ def test_get_package_from_both_py2_and_py3_specific_wheels(): ...@@ -295,6 +295,16 @@ def test_get_package_from_both_py2_and_py3_specific_wheels():
assert str(required[5].marker) == 'sys_platform != "win32"' 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(): def test_get_package_with_dist_and_universal_py3_wheel():
repo = MockRepository() repo = MockRepository()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment