diff options
author | Bernát Gábor <gaborjbernat@gmail.com> | 2022-12-14 13:44:08 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-14 13:44:08 -0800 |
commit | 12f6268a1800550e68db028c63db4a2813c1edab (patch) | |
tree | 039b6eaa045c0b3d569e3e462158d663bea4188e | |
parent | b8b0803cb8b295d520e19831ad5b7520fd45755c (diff) | |
download | tox-git-12f6268a1800550e68db028c63db4a2813c1edab.tar.gz |
Add py_dot_ver and py_impl (#2716)
Resolves https://github.com/tox-dev/tox/issues/2640
-rw-r--r-- | docs/changelog/2640.feature.rst | 3 | ||||
-rw-r--r-- | docs/faq.rst | 10 | ||||
-rw-r--r-- | src/tox/tox_env/api.py | 2 | ||||
-rw-r--r-- | src/tox/tox_env/python/api.py | 12 | ||||
-rw-r--r-- | tests/session/cmd/test_show_config.py | 9 |
5 files changed, 35 insertions, 1 deletions
diff --git a/docs/changelog/2640.feature.rst b/docs/changelog/2640.feature.rst new file mode 100644 index 00000000..bbf9b022 --- /dev/null +++ b/docs/changelog/2640.feature.rst @@ -0,0 +1,3 @@ +Add ``py_dot_ver`` and ``py_impl`` constants to environments to show the current Python implementation and dot version +(e.g. ``3.11``) for the current environment. These can be also used as substitutions in ``tox.ini`` - by +:user:`gaborbernat`. diff --git a/docs/faq.rst b/docs/faq.rst index f14d6266..205d8d54 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -79,6 +79,16 @@ tox 4 - removed tox.ini keys | ``distdir`` | Use the ``TOX_PACKAGE`` environment variable.| +--------------------------+----------------------------------------------+ +tox 4 - basepython not resolved ++++++++++++++++++++++++++++++++ +The base python configuration is no longer resolved to ``pythonx.y`` format, instead is kept as ``py39``, and is +the virtualenv project that handles mapping that to a Python interpreter. If you were using this variable we recommend +moving to the newly added ``py_impl`` and ``py_dot_ver`` variables, for example: + +.. code-block:: ini + + deps = -r{py_impl}{py_dot_ver}-req.txt + tox 4 - substitutions removed +++++++++++++++++++++++++++++ - The ``distshare`` substitution has been removed. diff --git a/src/tox/tox_env/api.py b/src/tox/tox_env/api.py index 13a9a4aa..e87710d5 100644 --- a/src/tox/tox_env/api.py +++ b/src/tox/tox_env/api.py @@ -323,7 +323,7 @@ class ToxEnv(ABC): result = self._load_pass_env(pass_env) # load/paths_env might trigger a load of the environment variables, set result here, returns current state - self._env_vars, self._env_vars_pass_env, set_env.changed = result, pass_env, False + self._env_vars, self._env_vars_pass_env, set_env.changed = result, pass_env.copy(), False # set PATH here in case setting and environment variable requires access to the environment variable PATH result["PATH"] = self._make_path() for key in set_env: diff --git a/src/tox/tox_env/python/api.py b/src/tox/tox_env/python/api.py index 09975569..6f25dd6a 100644 --- a/src/tox/tox_env/python/api.py +++ b/src/tox/tox_env/python/api.py @@ -40,6 +40,10 @@ class PythonInfo(NamedTuple): def impl_lower(self) -> str: return self.implementation.lower() + @property + def version_dot(self) -> str: + return f"{self.version_info.major}.{self.version_info.minor}" + class Python(ToxEnv, ABC): def __init__(self, create_args: ToxEnvCreateArgs) -> None: @@ -81,6 +85,14 @@ class Python(ToxEnv, ABC): desc="python executable from within the tox environment", value=lambda: self.env_python(), ) + self.conf.add_constant("py_dot_ver", "<python major>.<python minor>", value=self.py_dot_ver) + self.conf.add_constant("py_impl", "python implementation", value=self.py_impl) + + def py_dot_ver(self) -> str: + return self.base_python.version_dot + + def py_impl(self) -> str: + return self.base_python.impl_lower def _default_pass_env(self) -> list[str]: env = super()._default_pass_env() diff --git a/tests/session/cmd/test_show_config.py b/tests/session/cmd/test_show_config.py index 95b422ac..cf2e719a 100644 --- a/tests/session/cmd/test_show_config.py +++ b/tests/session/cmd/test_show_config.py @@ -72,6 +72,15 @@ def test_show_config_unused(tox_project: ToxProjectCreator) -> None: assert "\n# !!! unused: magic, magical\n" in outcome.out +def test_show_config_py_ver_impl_constants(tox_project: ToxProjectCreator) -> None: + tox_ini = "[testenv]\npackage=skip\ndeps= {py_impl}{py_dot_ver}" + outcome = tox_project({"tox.ini": tox_ini}).run("c", "-e", "py", "-k", "py_dot_ver", "py_impl", "deps") + outcome.assert_success() + py_ver = ".".join(str(i) for i in sys.version_info[0:2]) + impl = sys.implementation.name + assert outcome.out == f"[testenv:py]\npy_dot_ver = {py_ver}\npy_impl = {impl}\ndeps = {impl}{py_ver}\n" + + def test_show_config_exception(tox_project: ToxProjectCreator) -> None: project = tox_project( { |