From 27abb49113734d681c73ec948539f186c37f725a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Eustace?= Date: Fri, 6 Dec 2019 15:13:57 +0100 Subject: [PATCH] Improve the error message displayed on Python requirements conflict (#1681) --- poetry/mixology/failure.py | 25 +++++++++++++------ .../version_solver/test_python_constraint.py | 4 ++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/poetry/mixology/failure.py b/poetry/mixology/failure.py index 1a5bbfc8832..e6854335af3 100644 --- a/poetry/mixology/failure.py +++ b/poetry/mixology/failure.py @@ -31,18 +31,27 @@ def __init__(self, root): # type: (Incompatibility) -> None def write(self): buffer = [] - required_python_version = None + required_python_version_notification = False for incompatibility in self._root.external_incompatibilities: if isinstance(incompatibility.cause, PythonCause): - required_python_version = incompatibility.cause.root_python_version - break + if not required_python_version_notification: + buffer.append( + "The current project's Python requirement ({}) " + "is not compatible with some of the required " + "packages Python requirement:".format( + incompatibility.cause.root_python_version + ) + ) + required_python_version_notification = True - if required_python_version is not None: - buffer.append( - "The current project must support the following Python versions: {}".format( - required_python_version + buffer.append( + " - {} requires Python {}".format( + incompatibility.terms[0].dependency.name, + incompatibility.cause.python_version, + ) ) - ) + + if required_python_version_notification: buffer.append("") if isinstance(self._root.cause, ConflictCause): diff --git a/tests/mixology/version_solver/test_python_constraint.py b/tests/mixology/version_solver/test_python_constraint.py index 3e7b16bae01..910d51be784 100644 --- a/tests/mixology/version_solver/test_python_constraint.py +++ b/tests/mixology/version_solver/test_python_constraint.py @@ -8,7 +8,9 @@ def test_dependency_does_not_match_root_python_constraint(root, provider, repo): add_to_repo(repo, "foo", "1.0.0", python="<3.5") - error = """The current project must support the following Python versions: ^3.6 + error = """The current project's Python requirement (^3.6) \ +is not compatible with some of the required packages Python requirement: + - foo requires Python <3.5 Because no versions of foo match !=1.0.0 and foo (1.0.0) requires Python <3.5, foo is forbidden.