From 001a3b458893c53053b89879cce7adff7a196f5b Mon Sep 17 00:00:00 2001 From: "james.baker@helsing.ai" Date: Fri, 27 Jan 2023 08:05:30 +0000 Subject: [PATCH 1/6] platform release is not a version-like marker Version like markers are validated against PEP-440. This allows things like '1.0.0' and disallows things like '1.8.0_u60'. However, this is very valid in platform_release, as described in [PEP-508](https://peps.python.org/pep-0508/#environment-markers) which gives samples `3.14.1-x86_64-linode39, 14.5.0, 1.8.0_51`. platform_release should be a normal marker, which I think allows for equality checking only. This fixes #7418 where I was guided towards this solution. --- src/poetry/core/version/markers.py | 1 - tests/version/test_markers.py | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/poetry/core/version/markers.py b/src/poetry/core/version/markers.py index 7c12a34db..2d248af4d 100644 --- a/src/poetry/core/version/markers.py +++ b/src/poetry/core/version/markers.py @@ -178,7 +178,6 @@ class SingleMarker(BaseMarker): _VERSION_LIKE_MARKER_NAME = { "python_version", "python_full_version", - "platform_release", } def __init__( diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index dd45c2f7a..5a4cac32a 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -902,8 +902,8 @@ def test_validate( "marker, env", [ ( - 'platform_release >= "9.0" and platform_release < "11.0"', - {"platform_release": "10.0"}, + 'python_version >= "9.0" and python_version < "11.0"', + {"python_version": "10.0"}, ) ], ) From 1f59eb2a141085794302691be188cf4a069303cd Mon Sep 17 00:00:00 2001 From: "james.baker@helsing.ai" Date: Fri, 27 Jan 2023 08:17:20 +0000 Subject: [PATCH 2/6] add explicit test for this behaviour --- tests/version/test_markers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index 5a4cac32a..cd921267b 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -412,6 +412,8 @@ def test_multi_marker_intersect_multi_with_overlapping_constraints() -> None: ' "Windows"' ) +def test_environment_markers() -> None: + parse_marker('platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0" or platform_release == "1.8.0_51"') def test_multi_marker_intersect_with_union_drops_union() -> None: m = parse_marker('python_version >= "3" and python_version < "4"') From 99a466dec313faa21ee0bfcaf21574c94f866be7 Mon Sep 17 00:00:00 2001 From: "james.baker@helsing.ai" Date: Fri, 27 Jan 2023 08:18:52 +0000 Subject: [PATCH 3/6] Move unit test closer to original problem test to make more clear if anyone git blames this --- tests/version/test_markers.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index cd921267b..bbb2d83d2 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -412,9 +412,6 @@ def test_multi_marker_intersect_multi_with_overlapping_constraints() -> None: ' "Windows"' ) -def test_environment_markers() -> None: - parse_marker('platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0" or platform_release == "1.8.0_51"') - def test_multi_marker_intersect_with_union_drops_union() -> None: m = parse_marker('python_version >= "3" and python_version < "4"') m2 = parse_marker('python_version < "2" or python_version >= "3"') @@ -914,6 +911,8 @@ def test_parse_version_like_markers(marker: str, env: dict[str, str]) -> None: assert m.validate(env) +def test_environment_markers() -> None: + parse_marker('platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0" or platform_release == "1.8.0_51"') @pytest.mark.parametrize( "marker, expected", From 7685cc07122aeaa4bd0051a2d6a238c81fb88342 Mon Sep 17 00:00:00 2001 From: "james.baker@helsing.ai" Date: Fri, 27 Jan 2023 08:20:07 +0000 Subject: [PATCH 4/6] comment --- tests/version/test_markers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index bbb2d83d2..4d7c7139d 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -912,6 +912,7 @@ def test_parse_version_like_markers(marker: str, env: dict[str, str]) -> None: assert m.validate(env) def test_environment_markers() -> None: + # These are the platform_release markers given as examples in PEP-508 parse_marker('platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0" or platform_release == "1.8.0_51"') @pytest.mark.parametrize( From eca89a79e5956412b93ba70a60ae636e90f7b3c9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 08:21:46 +0000 Subject: [PATCH 5/6] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/version/test_markers.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index 4d7c7139d..53b683b6e 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -412,6 +412,7 @@ def test_multi_marker_intersect_multi_with_overlapping_constraints() -> None: ' "Windows"' ) + def test_multi_marker_intersect_with_union_drops_union() -> None: m = parse_marker('python_version >= "3" and python_version < "4"') m2 = parse_marker('python_version < "2" or python_version >= "3"') @@ -911,9 +912,14 @@ def test_parse_version_like_markers(marker: str, env: dict[str, str]) -> None: assert m.validate(env) + def test_environment_markers() -> None: # These are the platform_release markers given as examples in PEP-508 - parse_marker('platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0" or platform_release == "1.8.0_51"') + parse_marker( + 'platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0"' + ' or platform_release == "1.8.0_51"' + ) + @pytest.mark.parametrize( "marker, expected", From 334ef551e0becca3da83c86bf9571ba0fa094619 Mon Sep 17 00:00:00 2001 From: James Baker Date: Tue, 31 Jan 2023 21:53:29 +0000 Subject: [PATCH 6/6] Update test_markers.py --- tests/version/test_markers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/version/test_markers.py b/tests/version/test_markers.py index 53b683b6e..3fa00164f 100644 --- a/tests/version/test_markers.py +++ b/tests/version/test_markers.py @@ -913,8 +913,8 @@ def test_parse_version_like_markers(marker: str, env: dict[str, str]) -> None: assert m.validate(env) -def test_environment_markers() -> None: - # These are the platform_release markers given as examples in PEP-508 +def test_environment_marker_examples() -> None: + # These are the platform_release examples in PEP-508, so should always parse parse_marker( 'platform_release == "3.14.1-x86_64-linode39" or platform_release == "14.5.0"' ' or platform_release == "1.8.0_51"'