From 0b43d6dfed7399d9dc628e003d42dc21c1ced0f3 Mon Sep 17 00:00:00 2001 From: Jan Harkes Date: Thu, 10 Dec 2020 14:38:46 -0500 Subject: [PATCH] Fix fallback to other interpreters when specifying a patchlevel. When a project specifies a narrow range for the supported python versions, i.e. "python ~= 3.6.1" and the current interpreter falls outside of that range, the fallback code fails to test an available python3.6 interpreter because of a too strict a test. --- poetry/utils/env.py | 2 +- tests/utils/test_env.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/poetry/utils/env.py b/poetry/utils/env.py index e014c781688..6c54ce04cdb 100644 --- a/poetry/utils/env.py +++ b/poetry/utils/env.py @@ -847,7 +847,7 @@ def create_venv( supported_python ): continue - elif not supported_python.allows_all( + elif not supported_python.allows_any( parse_constraint(python_to_try + ".*") ): continue diff --git a/tests/utils/test_env.py b/tests/utils/test_env.py index 6366bb9a0e9..2567c5eb1a2 100644 --- a/tests/utils/test_env.py +++ b/tests/utils/test_env.py @@ -1091,3 +1091,35 @@ def test_env_finds_fallback_executables_for_generic_env(tmp_dir, manager): assert Path(venv.python).name == expected_executable assert Path(venv.pip).name == expected_pip_executable + + +def test_create_venv_accepts_fallback_version_w_nonzero_patchlevel( + manager, poetry, config, mocker, config_virtualenvs_path +): + if "VIRTUAL_ENV" in os.environ: + del os.environ["VIRTUAL_ENV"] + + poetry.package.python_versions = "~3.5.1" + venv_name = manager.generate_env_name("simple-project", str(poetry.file.parent)) + + check_output = mocker.patch( + "subprocess.check_output", + side_effect=lambda cmd, *args, **kwargs: str( + "3.5.12" if "python3.5" in cmd else "3.7.1" + ), + ) + m = mocker.patch( + "poetry.utils.env.EnvManager.build_venv", side_effect=lambda *args, **kwargs: "" + ) + + manager.create_venv(NullIO()) + + assert check_output.called + m.assert_called_with( + config_virtualenvs_path / "{}-py3.5".format(venv_name), + executable="python3.5", + flags={"always-copy": False, "system-site-packages": False}, + with_pip=True, + with_setuptools=True, + with_wheel=True, + )