diff --git a/setuptools/config/pyprojecttoml.py b/setuptools/config/pyprojecttoml.py index 15b0baa18e..fb277f5b7a 100644 --- a/setuptools/config/pyprojecttoml.py +++ b/setuptools/config/pyprojecttoml.py @@ -41,6 +41,19 @@ def load_file(filepath: StrPath) -> dict: def validate(config: dict, filepath: StrPath) -> bool: + skip = os.getenv("SETUPTOOLS_DANGEROUSLY_SKIP_PYPROJECT_VALIDATION", "false") + if skip.lower() == "true": # https://github.com/pypa/setuptools/issues/4459 + SetuptoolsWarning.emit( + "Skipping the validation of `pyproject.toml`.", + """ + Please note that some setuptools functionalities rely on the validation of + `pyproject.toml` against misconfiguration to ensure proper operation. + By skipping the automatic checks, you taking responsibility for making sure + the file is valid. Otherwise unexpected behaviours may occur. + """, + ) + return True + from . import _validate_pyproject as validator trove_classifier = validator.FORMAT_FUNCTIONS.get("trove-classifier") diff --git a/setuptools/tests/config/test_pyprojecttoml.py b/setuptools/tests/config/test_pyprojecttoml.py index db40fcd23d..df27487d51 100644 --- a/setuptools/tests/config/test_pyprojecttoml.py +++ b/setuptools/tests/config/test_pyprojecttoml.py @@ -17,6 +17,7 @@ ) from setuptools.dist import Distribution from setuptools.errors import OptionError +from setuptools.warnings import SetuptoolsWarning import distutils.core @@ -394,3 +395,9 @@ def test_warn_tools_typo(tmp_path): with pytest.warns(_ToolsTypoInMetadata): read_configuration(pyproject) + + +def test_warn_skipping_validation(monkeypatch): + monkeypatch.setenv("SETUPTOOLS_DANGEROUSLY_SKIP_PYPROJECT_VALIDATION", "true") + with pytest.warns(SetuptoolsWarning, match="Skipping the validation"): + assert validate({"completely-wrong": "data"}, "pyproject.toml") is True