From 51362d443d57715006dbff9eb282647e5047ce71 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 20 Mar 2023 19:53:16 +0000 Subject: [PATCH 1/3] Test warnings for dynamic scripts when entry-points is not dynamic --- setuptools/tests/config/test_apply_pyprojecttoml.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/setuptools/tests/config/test_apply_pyprojecttoml.py b/setuptools/tests/config/test_apply_pyprojecttoml.py index 3a66d494b3..0a34939a70 100644 --- a/setuptools/tests/config/test_apply_pyprojecttoml.py +++ b/setuptools/tests/config/test_apply_pyprojecttoml.py @@ -363,6 +363,18 @@ def test_optional_dependencies_dont_remove_env_markers(self, tmp_path): assert "importlib-resources" in reqs assert "bar" in reqs + @pytest.mark.parametrize( + "field,group", + [("scripts", "console_scripts"), ("gui-scripts", "gui_scripts")] + ) + @pytest.mark.filterwarnings("error") + def test_scripts_dont_require_dynamic_entry_points(self, tmp_path, field, group): + # Issue 3862 + pyproject = self.pyproject(tmp_path, [field]) + dist = makedist(tmp_path, entry_points={group: ["foobar=foobar:main"]}) + dist = pyprojecttoml.apply_configuration(dist, pyproject) + assert group in dist.entry_points + class TestMeta: def test_example_file_in_sdist(self, setuptools_sdist): From d27b6b95b56391c1c8e68460cc97fb23a62b80ad Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 20 Mar 2023 19:55:35 +0000 Subject: [PATCH 2/3] Fix '_WouldIgnoreField' warnings for scripts/gui_scripts --- setuptools/config/_apply_pyprojecttoml.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/setuptools/config/_apply_pyprojecttoml.py b/setuptools/config/_apply_pyprojecttoml.py index c805e63940..a2b443657d 100644 --- a/setuptools/config/_apply_pyprojecttoml.py +++ b/setuptools/config/_apply_pyprojecttoml.py @@ -279,6 +279,12 @@ def _normalise_cmd_options(desc: List[Tuple[str, Optional[str], str]]) -> Set[st return {_normalise_cmd_option_key(fancy_option[0]) for fancy_option in desc} +def _get_previous_entrypoints(dist: "Distribution") -> Dict[str, list]: + ignore = ("console_scripts", "gui_scripts") + value = getattr(dist, "entry_points", None) or {} + return {k: v for k, v in value.items() if k not in ignore} + + def _attrgetter(attr): """ Similar to ``operator.attrgetter`` but returns None if ``attr`` is not found @@ -343,7 +349,7 @@ def _acessor(obj): "keywords": _attrgetter("metadata.keywords"), "classifiers": _attrgetter("metadata.classifiers"), "urls": _attrgetter("metadata.project_urls"), - "entry-points": _attrgetter("entry_points"), + "entry-points": _get_previous_entrypoints, "dependencies": _some_attrgetter("_orig_install_requires", "install_requires"), "optional-dependencies": _some_attrgetter("_orig_extras_require", "extras_require"), } From 16ee218aa0243894b770a564900678b3f2d703b3 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Mon, 20 Mar 2023 19:58:20 +0000 Subject: [PATCH 3/3] Add news fragment --- changelog.d/3865.misc.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelog.d/3865.misc.rst diff --git a/changelog.d/3865.misc.rst b/changelog.d/3865.misc.rst new file mode 100644 index 0000000000..f46fc579b6 --- /dev/null +++ b/changelog.d/3865.misc.rst @@ -0,0 +1,2 @@ +Fixed ``_WouldIgnoreField`` warnings for ``scripts`` and ``gui_scripts``, +when ``entry-points`` is not listed in dynamic.