From 9096887578ad587072011c68a8a5d23d9078ab94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Fri, 28 Oct 2022 18:32:52 +0200 Subject: [PATCH] dependency: always add space before semicolon when building PEP 508 strings because it's required sometimes and was missing for directory dependencies --- src/poetry/core/packages/dependency.py | 7 ++----- tests/masonry/builders/test_builder.py | 2 +- tests/masonry/builders/test_complete.py | 4 ++-- tests/masonry/builders/test_sdist.py | 4 ++-- tests/masonry/test_api.py | 2 +- tests/packages/test_dependency.py | 14 +++++++------- tests/packages/test_directory_dependency.py | 11 +++++++++++ 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/poetry/core/packages/dependency.py b/src/poetry/core/packages/dependency.py index 794df2979..b7e8f7f79 100644 --- a/src/poetry/core/packages/dependency.py +++ b/src/poetry/core/packages/dependency.py @@ -316,14 +316,11 @@ def to_pep_508(self, with_extras: bool = True) -> str: ) if markers: - if self.is_vcs() or self.is_url() or self.is_file(): - requirement += " " - if len(markers) > 1: marker_str = " and ".join(f"({m})" for m in markers) - requirement += f"; {marker_str}" else: - requirement += f"; {markers[0]}" + marker_str = markers[0] + requirement += f" ; {marker_str}" return requirement diff --git a/tests/masonry/builders/test_builder.py b/tests/masonry/builders/test_builder.py index a6182b2bf..5e3fd6eae 100644 --- a/tests/masonry/builders/test_builder.py +++ b/tests/masonry/builders/test_builder.py @@ -114,7 +114,7 @@ def test_get_metadata_content() -> None: "cachy[msgpack] (>=0.2.0,<0.3.0)", "cleo (>=0.6,<0.7)", ( - 'pendulum (>=1.4,<2.0); (python_version ~= "2.7" and sys_platform ==' + 'pendulum (>=1.4,<2.0) ; (python_version ~= "2.7" and sys_platform ==' ' "win32" or python_version in "3.4 3.5") and (extra == "time")' ), ] diff --git a/tests/masonry/builders/test_complete.py b/tests/masonry/builders/test_complete.py index 4b753a0fa..c93ec3801 100644 --- a/tests/masonry/builders/test_complete.py +++ b/tests/masonry/builders/test_complete.py @@ -282,7 +282,7 @@ def test_complete() -> None: Provides-Extra: time Requires-Dist: cachy[msgpack] (>=0.2.0,<0.3.0) Requires-Dist: cleo (>=0.6,<0.7) -Requires-Dist: pendulum (>=1.4,<2.0); (python_version ~= "2.7" and sys_platform == "win32" or python_version in "3.4 3.5") and (extra == "time") +Requires-Dist: pendulum (>=1.4,<2.0) ; (python_version ~= "2.7" and sys_platform == "win32" or python_version in "3.4 3.5") and (extra == "time") Project-URL: Documentation, https://python-poetry.org/docs Project-URL: Issue Tracker, https://github.com/python-poetry/poetry/issues Project-URL: Repository, https://github.com/python-poetry/poetry @@ -407,7 +407,7 @@ def test_complete_no_vcs() -> None: Provides-Extra: time Requires-Dist: cachy[msgpack] (>=0.2.0,<0.3.0) Requires-Dist: cleo (>=0.6,<0.7) -Requires-Dist: pendulum (>=1.4,<2.0); (python_version ~= "2.7" and sys_platform == "win32" or python_version in "3.4 3.5") and (extra == "time") +Requires-Dist: pendulum (>=1.4,<2.0) ; (python_version ~= "2.7" and sys_platform == "win32" or python_version in "3.4 3.5") and (extra == "time") Project-URL: Documentation, https://python-poetry.org/docs Project-URL: Issue Tracker, https://github.com/python-poetry/poetry/issues Project-URL: Repository, https://github.com/python-poetry/poetry diff --git a/tests/masonry/builders/test_sdist.py b/tests/masonry/builders/test_sdist.py index ff6110278..09f545c92 100644 --- a/tests/masonry/builders/test_sdist.py +++ b/tests/masonry/builders/test_sdist.py @@ -207,8 +207,8 @@ def test_make_pkg_info_multi_constraints_dependency() -> None: requires = parsed.get_all("Requires-Dist") assert requires == [ - 'pendulum (>=1.5,<2.0); python_version < "3.4"', - 'pendulum (>=2.0,<3.0); python_version >= "3.4" and python_version < "4.0"', + 'pendulum (>=1.5,<2.0) ; python_version < "3.4"', + 'pendulum (>=2.0,<3.0) ; python_version >= "3.4" and python_version < "4.0"', ] diff --git a/tests/masonry/test_api.py b/tests/masonry/test_api.py index 1ba6d8edd..4b8c6feec 100644 --- a/tests/masonry/test_api.py +++ b/tests/masonry/test_api.py @@ -171,7 +171,7 @@ def test_prepare_metadata_for_build_wheel() -> None: Provides-Extra: time Requires-Dist: cachy[msgpack] (>=0.2.0,<0.3.0) Requires-Dist: cleo (>=0.6,<0.7) -Requires-Dist: pendulum (>=1.4,<2.0); (python_version ~= "2.7" and sys_platform == "win32" or python_version in "3.4 3.5") and (extra == "time") +Requires-Dist: pendulum (>=1.4,<2.0) ; (python_version ~= "2.7" and sys_platform == "win32" or python_version in "3.4 3.5") and (extra == "time") Project-URL: Documentation, https://python-poetry.org/docs Project-URL: Issue Tracker, https://github.com/python-poetry/poetry/issues Project-URL: Repository, https://github.com/python-poetry/poetry diff --git a/tests/packages/test_dependency.py b/tests/packages/test_dependency.py index 38e295598..e47bcc182 100644 --- a/tests/packages/test_dependency.py +++ b/tests/packages/test_dependency.py @@ -38,7 +38,7 @@ def test_to_pep_508() -> None: result = dependency.to_pep_508() assert ( result - == "Django (>=1.23,<2.0); " + == "Django (>=1.23,<2.0) ; " 'python_version >= "2.7" and python_version < "2.8" ' 'or python_version >= "3.6" and python_version < "4.0"' ) @@ -56,7 +56,7 @@ def test_to_pep_508_in_extras() -> None: dependency.in_extras.append(canonicalize_name("foo")) result = dependency.to_pep_508() - assert result == 'Django (>=1.23,<2.0); extra == "foo"' + assert result == 'Django (>=1.23,<2.0) ; extra == "foo"' result = dependency.to_pep_508(with_extras=False) assert result == "Django (>=1.23,<2.0)" @@ -64,14 +64,14 @@ def test_to_pep_508_in_extras() -> None: dependency.in_extras.append(canonicalize_name("bar")) result = dependency.to_pep_508() - assert result == 'Django (>=1.23,<2.0); extra == "foo" or extra == "bar"' + assert result == 'Django (>=1.23,<2.0) ; extra == "foo" or extra == "bar"' dependency.python_versions = "~2.7 || ^3.6" result = dependency.to_pep_508() assert ( result - == "Django (>=1.23,<2.0); " + == "Django (>=1.23,<2.0) ; " "(" 'python_version >= "2.7" and python_version < "2.8" ' 'or python_version >= "3.6" and python_version < "4.0"' @@ -82,7 +82,7 @@ def test_to_pep_508_in_extras() -> None: result = dependency.to_pep_508(with_extras=False) assert ( result - == "Django (>=1.23,<2.0); " + == "Django (>=1.23,<2.0) ; " 'python_version >= "2.7" and python_version < "2.8" ' 'or python_version >= "3.6" and python_version < "4.0"' ) @@ -94,7 +94,7 @@ def test_to_pep_508_in_extras_parsed() -> None: ) result = dependency.to_pep_508() - assert result == 'foo[bar,baz] (>=1.23,<2.0); extra == "baz"' + assert result == 'foo[bar,baz] (>=1.23,<2.0) ; extra == "baz"' result = dependency.to_pep_508(with_extras=False) assert result == "foo[bar,baz] (>=1.23,<2.0)" @@ -130,7 +130,7 @@ def test_to_pep_508_with_patch_python_version( dependency = Dependency("Django", "^1.23") dependency.python_versions = python_versions - expected = f"Django (>=1.23,<2.0); {marker}" + expected = f"Django (>=1.23,<2.0) ; {marker}" assert dependency.to_pep_508() == expected assert str(dependency.marker) == marker diff --git a/tests/packages/test_directory_dependency.py b/tests/packages/test_directory_dependency.py index a2836cc66..8d9c43170 100644 --- a/tests/packages/test_directory_dependency.py +++ b/tests/packages/test_directory_dependency.py @@ -81,6 +81,17 @@ def test_directory_dependency_pep_508_extras() -> None: _test_directory_dependency_pep_508("demo", path, requirement, expected) +def test_directory_dependency_pep_508_with_marker() -> None: + path = ( + Path(__file__).parent.parent + / "fixtures" + / "project_with_multi_constraints_dependency" + ) + requirement = f'demo @ file://{path.as_posix()} ; sys_platform == "linux"' + expected = f'demo @ {path.as_uri()} ; sys_platform == "linux"' + _test_directory_dependency_pep_508("demo", path, requirement, expected) + + @pytest.mark.parametrize( "name,path,extras,constraint,expected", [