diff options
author | Bernát Gábor <gaborjbernat@gmail.com> | 2022-12-09 19:46:00 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-09 19:46:00 -0800 |
commit | 8dff35790cd809d5707103cf78c223970075a2c9 (patch) | |
tree | 9ae6343548b5319ebdd951419f028ed4c0c347e2 | |
parent | 17950f439e25f66c5c85ef4c56d82052abde50f1 (diff) | |
download | tox-git-8dff35790cd809d5707103cf78c223970075a2c9.tar.gz |
Normalize extra names passed in (#2668)
Resolves https://github.com/tox-dev/tox/issues/2655
-rw-r--r-- | docs/changelog/2655.bugfix.rst | 1 | ||||
-rw-r--r-- | src/tox/tox_env/python/runner.py | 9 | ||||
-rw-r--r-- | tests/tox_env/python/test_python_runner.py | 22 |
3 files changed, 32 insertions, 0 deletions
diff --git a/docs/changelog/2655.bugfix.rst b/docs/changelog/2655.bugfix.rst new file mode 100644 index 00000000..88fa3003 --- /dev/null +++ b/docs/changelog/2655.bugfix.rst @@ -0,0 +1 @@ +Normalize extra names passed in (fixes extra groups not being picked up during installation) - by :user:`gaborbernat`. diff --git a/src/tox/tox_env/python/runner.py b/src/tox/tox_env/python/runner.py index 591633d7..785c4698 100644 --- a/src/tox/tox_env/python/runner.py +++ b/src/tox/tox_env/python/runner.py @@ -6,6 +6,8 @@ from __future__ import annotations from functools import partial from typing import Set +from packaging.utils import canonicalize_name + from tox.report import HandledError from tox.tox_env.errors import Skip from tox.tox_env.package import Package @@ -65,11 +67,18 @@ class PythonRun(Python, RunToxEnv): pkg_type = self.pkg_type if pkg_type == "skip": return False + + def _normalize_extras(values: set[str]) -> set[str]: + # although _ and . is allowed this will be normalized during packaging to - + # https://packaging.python.org/en/latest/specifications/dependency-specifiers/#grammar + return {canonicalize_name(v) for v in values} + self.conf.add_config( keys=["extras"], of_type=Set[str], default=set(), desc="extras to install of the target package", + post_process=_normalize_extras, ) return True diff --git a/tests/tox_env/python/test_python_runner.py b/tests/tox_env/python/test_python_runner.py index 797ad638..93d5e497 100644 --- a/tests/tox_env/python/test_python_runner.py +++ b/tests/tox_env/python/test_python_runner.py @@ -2,6 +2,8 @@ from __future__ import annotations from pathlib import Path +import pytest + from tox.journal import EnvJournal from tox.pytest import ToxProjectCreator from tox.tox_env.package import PathPackage @@ -99,3 +101,23 @@ def test_package_temp_dir_view(tox_project: ToxProjectCreator, demo_pkg_inline: msg = f" D package {session_path} links to {Path('.pkg') / 'dist'/ wheel_name} ({project.path/ '.tox'}) " assert msg in result.out assert f" D delete package {project.path / '.tox' / session_path}" in result.out + + +@pytest.mark.parametrize( + ("extra", "used_extra"), + [ + ("d_oc", "d-oc"), + ("d-oc", "d-oc"), + ("d.oc", "d-oc"), + ], +) +def test_extras_are_normalized( + tox_project: ToxProjectCreator, + demo_pkg_inline: Path, + extra: str, + used_extra: str, +) -> None: + project = tox_project({"tox.ini": f"[testenv]\nextras={extra}"}) + result = project.run("c", "-e", "py", "--root", str(demo_pkg_inline), "-k", "extras") + result.assert_success() + assert result.out == f"[testenv:py]\nextras = {used_extra}\n" |