From a6fa78881949753f351716ed84815edade406a7f Mon Sep 17 00:00:00 2001 From: finswimmer Date: Wed, 22 Jan 2025 06:50:53 +0100 Subject: [PATCH] feat(cli): fallback to build-in poetry-core on build --- src/poetry/console/commands/build.py | 12 ++++++++++++ tests/console/commands/test_build.py | 2 ++ .../build_systems/no_build_backend/README.md | 2 ++ .../build_systems/no_build_backend/pyproject.toml | 14 ++++++++++++++ .../no_build_backend/simple_project/__init__.py | 0 .../build_systems/no_build_system/README.md | 2 ++ .../build_systems/no_build_system/pyproject.toml | 11 +++++++++++ .../no_build_system/simple_project/__init__.py | 0 8 files changed, 43 insertions(+) create mode 100644 tests/fixtures/build_systems/no_build_backend/README.md create mode 100644 tests/fixtures/build_systems/no_build_backend/pyproject.toml create mode 100644 tests/fixtures/build_systems/no_build_backend/simple_project/__init__.py create mode 100644 tests/fixtures/build_systems/no_build_system/README.md create mode 100644 tests/fixtures/build_systems/no_build_system/pyproject.toml create mode 100644 tests/fixtures/build_systems/no_build_system/simple_project/__init__.py diff --git a/src/poetry/console/commands/build.py b/src/poetry/console/commands/build.py index 0bc293b1e16..7d47a87a7a0 100644 --- a/src/poetry/console/commands/build.py +++ b/src/poetry/console/commands/build.py @@ -91,6 +91,15 @@ def _requires_isolated_build(self) -> bool: :returns: True if an isolated build is required, False otherwise. """ + if not self._has_build_backend_defined(): + self.io.write_error_line( + "WARNING: No build backend defined. Please define one in the pyproject.toml.\n" + "Falling back to using the built-in `poetry-core` version.\n" + "In a future release Poetry will fallback to `setuptools` as defined by PEP 517.\n" + "More details can be found at https://python-poetry.org/docs/libraries/#packaging" + ) + return False + if ( self.poetry.package.build_script or len(self.poetry.build_system_dependencies) != 1 @@ -114,6 +123,9 @@ def _get_builder(self) -> Callable[..., None]: return self._build + def _has_build_backend_defined(self) -> bool: + return "build-backend" in self.poetry.pyproject.data.get("build-system", {}) + def build(self, options: BuildOptions) -> int: if not self.poetry.is_package_mode: self.io.write_error_line( diff --git a/tests/console/commands/test_build.py b/tests/console/commands/test_build.py index 18b57a3bf25..babba7421fe 100644 --- a/tests/console/commands/test_build.py +++ b/tests/console/commands/test_build.py @@ -269,6 +269,8 @@ def test_prepare_formats(fmt: str | None, expected_formats: list[str]) -> None: ("multiple_build_deps", True), ("no_core", True), ("core_from_git", True), + ("no_build_system", False), + ("no_build_backend", False), ], ) def test_requires_isolated_build( diff --git a/tests/fixtures/build_systems/no_build_backend/README.md b/tests/fixtures/build_systems/no_build_backend/README.md new file mode 100644 index 00000000000..f7fe15470f9 --- /dev/null +++ b/tests/fixtures/build_systems/no_build_backend/README.md @@ -0,0 +1,2 @@ +My Package +========== diff --git a/tests/fixtures/build_systems/no_build_backend/pyproject.toml b/tests/fixtures/build_systems/no_build_backend/pyproject.toml new file mode 100644 index 00000000000..ce7a0d64c46 --- /dev/null +++ b/tests/fixtures/build_systems/no_build_backend/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "simple-project" +version = "1.2.3" +description = "Some description." +authors = [ + { name = "Poetry Contributors", email = "no-reply@python-poetry.org" } +] +license = { text = "MIT" } +readme = "README.md" +keywords = ["packaging", "dependency", "poetry"] +requires-python = ">=3.4" + +[build-system] +requires = ["poetry-core>=1.1.0a7"] diff --git a/tests/fixtures/build_systems/no_build_backend/simple_project/__init__.py b/tests/fixtures/build_systems/no_build_backend/simple_project/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/fixtures/build_systems/no_build_system/README.md b/tests/fixtures/build_systems/no_build_system/README.md new file mode 100644 index 00000000000..f7fe15470f9 --- /dev/null +++ b/tests/fixtures/build_systems/no_build_system/README.md @@ -0,0 +1,2 @@ +My Package +========== diff --git a/tests/fixtures/build_systems/no_build_system/pyproject.toml b/tests/fixtures/build_systems/no_build_system/pyproject.toml new file mode 100644 index 00000000000..6c3dd468b9f --- /dev/null +++ b/tests/fixtures/build_systems/no_build_system/pyproject.toml @@ -0,0 +1,11 @@ +[project] +name = "simple-project" +version = "1.2.3" +description = "Some description." +authors = [ + { name = "Poetry Contributors", email = "no-reply@python-poetry.org" } +] +license = { text = "MIT" } +readme = "README.md" +keywords = ["packaging", "dependency", "poetry"] +requires-python = ">=3.4" diff --git a/tests/fixtures/build_systems/no_build_system/simple_project/__init__.py b/tests/fixtures/build_systems/no_build_system/simple_project/__init__.py new file mode 100644 index 00000000000..e69de29bb2d