From dbc1e1b932794d7a06fa12589ebc82972bb7317e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Tue, 21 Apr 2020 19:25:28 +0200 Subject: [PATCH] build: remove 'm' and 'd' ABI tags for Python 3.8 wheels --- poetry/masonry/utils/tags.py | 25 +++++----- poetry/utils/env.py | 11 +++++ tests/masonry/utils/test_tags.py | 79 ++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 tests/masonry/utils/test_tags.py diff --git a/poetry/masonry/utils/tags.py b/poetry/masonry/utils/tags.py index 175cdd8b73b..88dc33f5b53 100644 --- a/poetry/masonry/utils/tags.py +++ b/poetry/masonry/utils/tags.py @@ -76,19 +76,22 @@ def get_abi_tag(env): env, "Py_DEBUG", lambda: hasattr(sys, "gettotalrefcount"), - warn=(impl == "cp"), + warn=(impl == "cp" and env.version_info < (3, 8)), ): d = "d" - if get_flag(env, "WITH_PYMALLOC", lambda: impl == "cp", warn=(impl == "cp")): - m = "m" - if get_flag( - env, - "Py_UNICODE_SIZE", - lambda: sys.maxunicode == 0x10FFFF, - expected=4, - warn=(impl == "cp" and env.version_info < (3, 3)), - ) and env.version_info < (3, 3): - u = "u" + if env.version_info < (3, 8): + if get_flag( + env, "WITH_PYMALLOC", lambda: impl == "cp", warn=(impl == "cp") + ): + m = "m" + if get_flag( + env, + "Py_UNICODE_SIZE", + lambda: sys.maxunicode == 0x10FFFF, + expected=4, + warn=(impl == "cp" and env.version_info < (3, 3)), + ) and env.version_info < (3, 3): + u = "u" abi = "%s%s%s%s%s" % (impl, get_impl_ver(env), d, m, u) elif soabi and soabi.startswith("cpython-"): abi = "cp" + soabi.split("-")[1] diff --git a/poetry/utils/env.py b/poetry/utils/env.py index 0c326880ba1..5b18878df5f 100644 --- a/poetry/utils/env.py +++ b/poetry/utils/env.py @@ -1151,6 +1151,7 @@ def __init__( is_venv=False, pip_version="19.1", sys_path=None, + config_vars=None, **kwargs ): super(MockEnv, self).__init__(**kwargs) @@ -1162,6 +1163,7 @@ def __init__( self._is_venv = is_venv self._pip_version = Version.parse(pip_version) self._sys_path = sys_path + self._config_vars = config_vars @property def version_info(self): # type: () -> Tuple[int] @@ -1192,3 +1194,12 @@ def sys_path(self): def is_venv(self): # type: () -> bool return self._is_venv + + def config_var(self, var): # type: (str) -> Any + if self._config_vars is None: + return super().config_var(var) + else: + try: + return self._config_vars[var] + except KeyError: + return None diff --git a/tests/masonry/utils/test_tags.py b/tests/masonry/utils/test_tags.py new file mode 100644 index 00000000000..50193f509a2 --- /dev/null +++ b/tests/masonry/utils/test_tags.py @@ -0,0 +1,79 @@ +import pytest + +from poetry.masonry.utils.tags import get_abi_tag +from poetry.utils.env import MockEnv + + +def test_tags_cpython38(): + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 8, 0), + python_implementation="CPython", + config_vars={"Py_DEBUG": True}, + ) + ) + == "cp38d" + ) + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 8, 0), python_implementation="CPython", config_vars={}, + ) + ) + == "cp38" + ) + + +def test_tags_cpython37(): + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 7, 3), + python_implementation="CPython", + config_vars={"Py_DEBUG": True, "WITH_PYMALLOC": True}, + ) + ) + == "cp37dm" + ) + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 7, 3), + python_implementation="CPython", + config_vars={"Py_DEBUG": True, "WITH_PYMALLOC": False}, + ) + ) + == "cp37d" + ) + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 7, 3), + python_implementation="CPython", + config_vars={"Py_DEBUG": False, "WITH_PYMALLOC": True}, + ) + ) + == "cp37m" + ) + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 7, 3), + python_implementation="CPython", + config_vars={"Py_DEBUG": False, "WITH_PYMALLOC": False}, + ) + ) + == "cp37" + ) + with pytest.warns(RuntimeWarning): + assert ( + get_abi_tag( + MockEnv( + version_info=(3, 7, 3), + python_implementation="CPython", + config_vars={"Py_DEBUG": False}, + ) + ) + == "cp37m" + )