Skip to content

[tests] test_invalid_hook_choice and test_deps_cli_add_wrong_srctype fail against Python 3.12.8/3.13.1 #96

@stanislavlevin

Description

@stanislavlevin

With Python 3.12.8/3.13.1 several tests fail:

============================= test session starts ==============================
platform linux -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 -- /opt/hostedtoolcache/Python/3.12.8/x64/bin/python

...

___________________________ test_invalid_hook_choice ___________________________

    def test_invalid_hook_choice():
        invalid_hook = "invalid_hook_name"
        result = subprocess.run(
            args=[sys.executable, "-m", BACKEND_CALLER_MOD, "be", invalid_hook],
            capture_output=True,
        )
        expected_err_msg = (
            "argument hook_name: invalid choice: '{}' (choose from {})\n"
        ).format(
            invalid_hook,
            ", ".join([f"{x!r}" for x in backend_caller.SUPPORTED_HOOKS]),
        )
    
        assert result.returncode
>       assert expected_err_msg.encode("utf-8") in result.stderr
E       assert b"argument hook_name: invalid choice: 'invalid_hook_name' (choose from 'build_wheel', 'build_sdist', 'get_requires_for_build_wheel', 'get_requires_for_build_sdist', 'prepare_metadata_for_build_wheel')\n" in b"usage: backend_caller.py [-h] [--backend-path BACKEND_PATH]\n                         [--result-fd RESULT_FD] [-v] [--hook-args HOOK_ARGS]\n                         backend\n                         {build_wheel,build_sdist,get_requires_for_build_wheel,get_requires_for_build_sdist,prepare_metadata_for_build_wheel}\nbackend_caller.py: error: argument hook_name: invalid choice: 'invalid_hook_name' (choose from build_wheel, build_sdist, get_requires_for_build_wheel, get_requires_for_build_sdist, prepare_metadata_for_build_wheel)\n"
E        +  where b"argument hook_name: invalid choice: 'invalid_hook_name' (choose from 'build_wheel', 'build_sdist', 'get_requires_for_build_wheel', 'get_requires_for_build_sdist', 'prepare_metadata_for_build_wheel')\n" = <built-in method encode of str object at 0x7f7336a1f750>('utf-8')
E        +    where <built-in method encode of str object at 0x7f7336a1f750> = "argument hook_name: invalid choice: 'invalid_hook_name' (choose from 'build_wheel', 'build_sdist', 'get_requires_for_build_wheel', 'get_requires_for_build_sdist', 'prepare_metadata_for_build_wheel')\n".encode
E        +  and   b"usage: backend_caller.py [-h] [--backend-path BACKEND_PATH]\n                         [--result-fd RESULT_FD] [-v] [--hook-args HOOK_ARGS]\n                         backend\n                         {build_wheel,build_sdist,get_requires_for_build_wheel,get_requires_for_build_sdist,prepare_metadata_for_build_wheel}\nbackend_caller.py: error: argument hook_name: invalid choice: 'invalid_hook_name' (choose from build_wheel, build_sdist, get_requires_for_build_wheel, get_requires_for_build_sdist, prepare_metadata_for_build_wheel)\n" = CompletedProcess(args=['/opt/hostedtoolcache/Python/3.12.8/x64/bin/python', '-m', 'pyproject_installer.lib.backend_helper.backend_caller', 'be', 'invalid_hook_name'], returncode=2, stdout=b'', stderr=b"usage: backend_caller.py [-h] [--backend-path BACKEND_PATH]\n                         [--result-fd RESULT_FD] [-v] [--hook-args HOOK_ARGS]\n                         backend\n                         {build_wheel,build_sdist,get_requires_for_build_wheel,get_requires_for_build_sdist,prepare_metadata_for_build_wheel}\nbackend_caller.py: error: argument hook_name: invalid choice: 'invalid_hook_name' (choose from build_wheel, build_sdist, get_requires_for_build_wheel, get_requires_for_build_sdist, prepare_metadata_for_build_wheel)\n").stderr

tests/unit/test_build/test_backend_caller.py:140: AssertionError

...

_______________________ test_deps_cli_add_wrong_srctype ________________________

mock_deps_command = <MagicMock name='deps_command' id='140132789667696'>
capsys = <_pytest.capture.CaptureFixture object at 0x7f7335268680>

    def test_deps_cli_add_wrong_srctype(mock_deps_command, capsys):
        """Run deps add with wrong srctype
    
        - mock deps_command
        - check args
        """
        action = "add"
        srcname = "foo"
        srctype = "bar"
        deps_args = ["deps", action, srcname, srctype]
    
        with pytest.raises(SystemExit) as exc:
            project_main.main(deps_args)
        assert exc.value.code == ExitCodes.WRONG_USAGE
    
        supported_types_msg = ", ".join(
            f"'{x}'" for x in project_main.SUPPORTED_COLLECTORS
        )
        expected_err_msg = (
            f"invalid choice: '{srctype}' (choose from {supported_types_msg})"
        )
        captured = capsys.readouterr()
        assert not captured.out
>       assert expected_err_msg in captured.err
E       assert "invalid choice: 'bar' (choose from 'pep517', 'pep518', 'metadata', 'pip_reqfile', 'poetry', 'tox', 'hatch', 'pdm', 'pipenv', 'pep735')" in "usage: python -m pyproject_installer deps add [-h]\n                                              srcname\n                                              {pep517,pep518,metadata,pip_reqfile,poetry,tox,hatch,pdm,pipenv,pep735}\n                                              [srcargs ...]\npython -m pyproject_installer deps add: error: argument srctype: invalid choice: 'bar' (choose from pep517, pep518, metadata, pip_reqfile, poetry, tox, hatch, pdm, pipenv, pep735)\n"
E        +  where "usage: python -m pyproject_installer deps add [-h]\n                                              srcname\n                                              {pep517,pep518,metadata,pip_reqfile,poetry,tox,hatch,pdm,pipenv,pep735}\n                                              [srcargs ...]\npython -m pyproject_installer deps add: error: argument srctype: invalid choice: 'bar' (choose from pep517, pep518, metadata, pip_reqfile, poetry, tox, hatch, pdm, pipenv, pep735)\n" = CaptureResult(out='', err="usage: python -m pyproject_installer deps add [-h]\n                                              srcname\n                                              {pep517,pep518,metadata,pip_reqfile,poetry,tox,hatch,pdm,pipenv,pep735}\n                                              [srcargs ...]\npython -m pyproject_installer deps add: error: argument srctype: invalid choice: 'bar' (choose from pep517, pep518, metadata, pip_reqfile, poetry, tox, hatch, pdm, pipenv, pep735)\n").err

tests/unit/test_main.py:1117: AssertionError

Root cause:
https://docs.python.org/release/3.12.8/whatsnew/changelog.html#python-3-12-8

gh-117766: Always use str() to print choices in argparse.

See for details:
python/cpython#117766

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions