From 1b90a820c4813e2d815a3dceb38af0591869755c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Wed, 13 Oct 2021 17:25:57 +0200 Subject: [PATCH] Add _supported_hooks --- pep517/in_process/_in_process.py | 14 ++++++++++++++ pep517/wrappers.py | 3 +++ tests/test_call_hooks.py | 24 ++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/pep517/in_process/_in_process.py b/pep517/in_process/_in_process.py index c7f5f05..e519f6f 100644 --- a/pep517/in_process/_in_process.py +++ b/pep517/in_process/_in_process.py @@ -103,6 +103,19 @@ def _build_backend(): return obj +def _supported_hooks(): + """Invoke the _supported_hooks pseudo hook. + + Returns a list of strings. + """ + backend = _build_backend() + return [ + hook_name + for hook_name in sorted(HOOK_NAMES) + if hook_name != "_supported_hooks" and hasattr(backend, hook_name) + ] + + def get_requires_for_build_wheel(config_settings): """Invoke the optional get_requires_for_build_wheel hook @@ -312,6 +325,7 @@ def build_sdist(sdist_directory, config_settings): 'build_editable', 'get_requires_for_build_sdist', 'build_sdist', + '_supported_hooks', } diff --git a/pep517/wrappers.py b/pep517/wrappers.py index 52da22e..5279aac 100644 --- a/pep517/wrappers.py +++ b/pep517/wrappers.py @@ -154,6 +154,9 @@ def subprocess_runner(self, runner): finally: self._subprocess_runner = prev + def _supported_hooks(self): + return self._call_hook('_supported_hooks', {}) + def get_requires_for_build_wheel(self, config_settings=None): """Identify packages required for building a wheel diff --git a/tests/test_call_hooks.py b/tests/test_call_hooks.py index 381fe33..6801581 100644 --- a/tests/test_call_hooks.py +++ b/tests/test_call_hooks.py @@ -211,3 +211,27 @@ def test_setup_py(): # Some versions of setuptools list setuptools itself here res = [x for x in res if x != 'setuptools'] assert res == ['wheel'] + + +@pytest.mark.parametrize( + ("pkg", "expected"), + [ + ("pkg1", [ + "build_editable", + "build_sdist", + "build_wheel", + "get_requires_for_build_editable", + "get_requires_for_build_sdist", + "get_requires_for_build_wheel", + "prepare_metadata_for_build_editable", + "prepare_metadata_for_build_wheel", + ]), + ("pkg2", ["build_sdist", "build_wheel"]), + ("pkg3", ["build_editable", "build_sdist", "build_wheel"]), + ], +) +def test__supported_hooks(pkg, expected): + hooks = get_hooks(pkg) + with modified_env({"PYTHONPATH": BUILDSYS_PKGS}): + res = hooks._supported_hooks() + assert res == expected