From ef8adf8fe378d9c12568276a494c67f54ddffb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Mon, 2 Mar 2020 18:10:41 +0100 Subject: [PATCH 1/7] remove 'm' and 'd' tags for Python 3.8 --- poetry/masonry/utils/tags.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/poetry/masonry/utils/tags.py b/poetry/masonry/utils/tags.py index 175cdd8b73b..d9b95f10560 100644 --- a/poetry/masonry/utils/tags.py +++ b/poetry/masonry/utils/tags.py @@ -75,11 +75,16 @@ def get_abi_tag(env): if get_flag( env, "Py_DEBUG", - lambda: hasattr(sys, "gettotalrefcount"), - warn=(impl == "cp"), + lambda: (hasattr(sys, "gettotalrefcount") and env.version_info < (3, 8)), + warn=(impl == "cp" and env.version_info < (3, 8)), ): d = "d" - if get_flag(env, "WITH_PYMALLOC", lambda: impl == "cp", warn=(impl == "cp")): + if get_flag( + env, + "WITH_PYMALLOC", + lambda: (impl == "cp" and env.version_info < (3, 8)), + warn=(impl == "cp" and env.version_info < (3, 8)), + ): m = "m" if get_flag( env, From 65f55e641eb6284d182fec017b7e5487fc7dca27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Thu, 16 Apr 2020 08:03:34 +0200 Subject: [PATCH 2/7] fix 'd' flag for CPython 3.8 --- poetry/masonry/utils/tags.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/poetry/masonry/utils/tags.py b/poetry/masonry/utils/tags.py index d9b95f10560..88dc33f5b53 100644 --- a/poetry/masonry/utils/tags.py +++ b/poetry/masonry/utils/tags.py @@ -75,25 +75,23 @@ def get_abi_tag(env): if get_flag( env, "Py_DEBUG", - lambda: (hasattr(sys, "gettotalrefcount") and env.version_info < (3, 8)), + lambda: hasattr(sys, "gettotalrefcount"), warn=(impl == "cp" and env.version_info < (3, 8)), ): d = "d" - if get_flag( - env, - "WITH_PYMALLOC", - lambda: (impl == "cp" and env.version_info < (3, 8)), - warn=(impl == "cp" and env.version_info < (3, 8)), - ): - 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] From 2345e7407539cd37aa9756b69c2a5b870f53a22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Thu, 16 Apr 2020 08:11:11 +0200 Subject: [PATCH 3/7] add test for CPython 3.8 ABI tags --- poetry/utils/env.py | 15 +++++++++++++-- tests/masonry/utils/test_tags.py | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/masonry/utils/test_tags.py diff --git a/poetry/utils/env.py b/poetry/utils/env.py index 0c326880ba1..ca0139e0515 100644 --- a/poetry/utils/env.py +++ b/poetry/utils/env.py @@ -881,7 +881,7 @@ def _run(self, cmd, **kwargs): stderr=subprocess.STDOUT, input=encode(input_), check=True, - **kwargs + **kwargs, ).stdout elif call: return subprocess.call(cmd, stderr=subprocess.STDOUT, **kwargs) @@ -1151,7 +1151,8 @@ def __init__( is_venv=False, pip_version="19.1", sys_path=None, - **kwargs + 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..48d76ea5d37 --- /dev/null +++ b/tests/masonry/utils/test_tags.py @@ -0,0 +1,25 @@ +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" + ) From 8a0ccd9b1823b4b830cf581f6ea41157b05da386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Thu, 16 Apr 2020 08:13:27 +0200 Subject: [PATCH 4/7] remove unused import --- tests/masonry/utils/test_tags.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/masonry/utils/test_tags.py b/tests/masonry/utils/test_tags.py index 48d76ea5d37..8ce2f04e5dc 100644 --- a/tests/masonry/utils/test_tags.py +++ b/tests/masonry/utils/test_tags.py @@ -1,5 +1,3 @@ -import pytest - from poetry.masonry.utils.tags import get_abi_tag from poetry.utils.env import MockEnv From 147a37138f033792ad376952840663c5619d8974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Thu, 16 Apr 2020 08:34:21 +0200 Subject: [PATCH 5/7] fix broken syntax for older Python versions --- poetry/utils/env.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poetry/utils/env.py b/poetry/utils/env.py index ca0139e0515..e54304ad700 100644 --- a/poetry/utils/env.py +++ b/poetry/utils/env.py @@ -1152,7 +1152,7 @@ def __init__( pip_version="19.1", sys_path=None, config_vars=None, - **kwargs, + **kwargs ): super(MockEnv, self).__init__(**kwargs) From 328c64c0feb386b8c68bdea5fa59fdcace6dc0eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Thu, 16 Apr 2020 08:40:15 +0200 Subject: [PATCH 6/7] fix broken syntax for older Python versions --- poetry/utils/env.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poetry/utils/env.py b/poetry/utils/env.py index e54304ad700..5b18878df5f 100644 --- a/poetry/utils/env.py +++ b/poetry/utils/env.py @@ -881,7 +881,7 @@ def _run(self, cmd, **kwargs): stderr=subprocess.STDOUT, input=encode(input_), check=True, - **kwargs, + **kwargs ).stdout elif call: return subprocess.call(cmd, stderr=subprocess.STDOUT, **kwargs) From 706c360eb9931e1d348dc63901ed9784d4d2ec6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20K=C3=B6hl?= Date: Mon, 20 Apr 2020 10:22:21 +0200 Subject: [PATCH 7/7] add test for CPython 3.7 ABI tags --- tests/masonry/utils/test_tags.py | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/masonry/utils/test_tags.py b/tests/masonry/utils/test_tags.py index 8ce2f04e5dc..50193f509a2 100644 --- a/tests/masonry/utils/test_tags.py +++ b/tests/masonry/utils/test_tags.py @@ -1,3 +1,5 @@ +import pytest + from poetry.masonry.utils.tags import get_abi_tag from poetry.utils.env import MockEnv @@ -21,3 +23,57 @@ def test_tags_cpython38(): ) == "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" + )