From e0279f681d6ec77720ef8c2c7d6b627d351809ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Eustace?= Date: Fri, 24 Jul 2020 11:04:36 +0200 Subject: [PATCH] Fix incorrect resolution errors for dependencies with looser python constraints --- poetry/puzzle/provider.py | 4 ++++ tests/puzzle/test_solver.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/poetry/puzzle/provider.py b/poetry/puzzle/provider.py index 663a0ce6090..d785377d8c8 100644 --- a/poetry/puzzle/provider.py +++ b/poetry/puzzle/provider.py @@ -392,6 +392,10 @@ def incompatibilities_for( transitive_python_constraint ) difference = transitive_python_constraint.difference(intersection) + + # The difference is only relevant if it intersects + # the root package python constraint + difference = difference.intersect(self._python_constraint) if ( transitive_python_constraint.is_any() or self._python_constraint.intersect( diff --git a/tests/puzzle/test_solver.py b/tests/puzzle/test_solver.py index c64438cca3f..a3678c43bd4 100644 --- a/tests/puzzle/test_solver.py +++ b/tests/puzzle/test_solver.py @@ -2073,3 +2073,19 @@ def test_solver_should_resolve_all_versions_for_multiple_duplicate_dependencies( {"job": "install", "package": package_b40}, ], ) + + +def test_solver_should_not_raise_errors_for_irrelevant_python_constraints( + solver, repo, package +): + package.python_versions = "^3.6" + solver.provider.set_package_python_versions("^3.6") + package.add_dependency("dataclasses", {"version": "^0.7", "python": "<3.7"}) + + dataclasses = get_package("dataclasses", "0.7") + dataclasses.python_versions = ">=3.6, <3.7" + + repo.add_package(dataclasses) + ops = solver.solve() + + check_solver_result(ops, [{"job": "install", "package": dataclasses}])