diff --git a/packaging/tags.py b/packaging/tags.py index a0e1ea23..2c4fb390 100644 --- a/packaging/tags.py +++ b/packaging/tags.py @@ -480,6 +480,15 @@ def interpreter_version(*, warn: bool = False) -> str: return version +def interpreter_tag(*, warn: bool = False) -> Optional[str]: + interp_name = interpreter_name() + if interp_name == "pp": + return "pp3" + elif interp_name == "cp": + return "cp" + interpreter_version(warn=warn) + return None + + def _version_nodot(version: PythonVersion) -> str: return "".join(map(str, version)) @@ -498,10 +507,4 @@ def sys_tags(*, warn: bool = False) -> Iterator[Tag]: else: yield from generic_tags() - if interp_name == "pp": - interp = "pp3" - elif interp_name == "cp": - interp = "cp" + interpreter_version(warn=warn) - else: - interp = None - yield from compatible_tags(interpreter=interp) + yield from compatible_tags(interpreter=interpreter_tag(warn=warn)) diff --git a/tests/test_tags.py b/tests/test_tags.py index 39515e8d..84acfc61 100644 --- a/tests/test_tags.py +++ b/tests/test_tags.py @@ -166,6 +166,21 @@ def test_sys_version_info(self, version_info, version_str, monkeypatch): assert tags.interpreter_version() == version_str +class TestInterpreterTag: + def test_interpreter_tag_cpython(self, monkeypatch): + monkeypatch.setattr(tags, "interpreter_name", lambda: "cp") + monkeypatch.setattr(tags, "interpreter_version", lambda **kwargs: "311") + assert tags.interpreter_tag() == "cp311" + + def test_interpreter_tag_pypy(self, monkeypatch): + monkeypatch.setattr(tags, "interpreter_name", lambda: "pp") + assert tags.interpreter_tag() == "pp3" + + def test_interpreter_tag_unknown(self, monkeypatch): + monkeypatch.setattr(tags, "interpreter_name", lambda: "unknown") + assert tags.interpreter_tag() is None + + class TestMacOSPlatforms: @pytest.mark.parametrize( "arch, is_32bit, expected",