From d4b6dea7d86fa0220a718f1fde387cc117172bed Mon Sep 17 00:00:00 2001 From: Blazej Michalik Date: Wed, 18 May 2022 22:26:32 +0200 Subject: [PATCH] Evaluate markers under environment with no extra --- CHANGELOG.rst | 4 +++- packaging/markers.py | 1 + tests/test_markers.py | 8 +++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 214326e2f..23b85d196 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,9 @@ Changelog *unreleased* ~~~~~~~~~~~~ -No unreleased changes. +* ``Marker.evaluate`` will now assume evaluation environment with empty ``extra``. + Evaluating markers like ``"extra == 'xyz'"`` without passing any extra in the + ``environment`` will no longer raise an exception. 21.3 - 2021-11-17 ~~~~~~~~~~~~~~~~~ diff --git a/packaging/markers.py b/packaging/markers.py index 03d8cdefc..f97b0154f 100644 --- a/packaging/markers.py +++ b/packaging/markers.py @@ -274,6 +274,7 @@ def default_environment() -> Dict[str, str]: iver = format_full_version(sys.implementation.version) implementation_name = sys.implementation.name return { + "extra": "", "implementation_name": implementation_name, "implementation_version": iver, "os_name": os.name, diff --git a/tests/test_markers.py b/tests/test_markers.py index b1ccf63c6..99a7709df 100644 --- a/tests/test_markers.py +++ b/tests/test_markers.py @@ -110,6 +110,7 @@ def test_matches_expected(self): ) assert environment == { + "extra": "", "implementation_name": sys.implementation.name, "implementation_version": iver, "os_name": os.name, @@ -253,11 +254,8 @@ def test_compare_markers_to_other_objects(self): # Markers should not be comparable to other kinds of objects. assert Marker("os_name == 'nt'") != "os_name == 'nt'" - def test_extra_with_no_extra_in_environment(self): - # We can't evaluate an extra if no extra is passed into the environment - m = Marker("extra == 'security'") - with pytest.raises(UndefinedEnvironmentName): - m.evaluate() + def test_environment_assumes_empty_extra(self): + assert Marker('extra == "im_valid"').evaluate() is False @pytest.mark.parametrize( ("marker_string", "environment", "expected"),