def test_linux_platforms_manylinux2014(self, monkeypatch): monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(platform, "machine", lambda: "x86_64") monkeypatch.setattr(os, "confstr", lambda x: "glibc 2.17", raising=False) platforms = list(tags._linux_platforms(is_32bit=False)) arch = platform.machine() expected = [ "manylinux_2_17_" + arch, "manylinux2014_" + arch, "manylinux_2_16_" + arch, "manylinux_2_15_" + arch, "manylinux_2_14_" + arch, "manylinux_2_13_" + arch, "manylinux_2_12_" + arch, "manylinux2010_" + arch, "manylinux_2_11_" + arch, "manylinux_2_10_" + arch, "manylinux_2_9_" + arch, "manylinux_2_8_" + arch, "manylinux_2_7_" + arch, "manylinux_2_6_" + arch, "manylinux_2_5_" + arch, "manylinux1_" + arch, "linux_" + arch, ] assert platforms == expected
def test_linux_platforms_32_64bit_on_64bit_os( self, arch, is_32bit, expected, monkeypatch ): monkeypatch.setattr(distutils.util, "get_platform", lambda: arch) monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda *args: False) linux_platform = list(tags._linux_platforms(is_32bit=is_32bit))[-1] assert linux_platform == expected
def test_linux_use_manylinux_compatible( self, monkeypatch, manylinux_module, machine, major, minor, tf ): def manylinux_compatible(tag_major, tag_minor, tag_arch): if tag_major == 2 and tag_minor == 22: return tag_arch == "s390x" return False monkeypatch.setattr( tags._manylinux, "_get_glibc_version", lambda: (major, minor), ) monkeypatch.setattr(sysconfig, "get_platform", lambda: f"linux_{machine}") monkeypatch.setattr( manylinux_module, "manylinux_compatible", manylinux_compatible, raising=False, ) platforms = list(tags._linux_platforms(is_32bit=False)) if tf: expected = [f"manylinux_2_22_{machine}"] else: expected = [] expected.append(f"linux_{machine}") assert platforms == expected
def test_linux_platforms_32bit_on_64bit_os(monkeypatch): is_64bit_os = distutils.util.get_platform().endswith("_x86_64") if platform.system() != "Linux" or not is_64bit_os: monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda *args: False) linux_platform = tags._linux_platforms(is_32bit=True)[-1] assert linux_platform == "linux_i686"
def test_linux_platforms_manylinux_unsupported(self, monkeypatch): monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda *args: False) linux_platform = list(tags._linux_platforms(is_32bit=False)) assert linux_platform == ["linux_x86_64"]
def test_linux_platforms_manylinux2014_i386_abi(self, monkeypatch): monkeypatch.setattr(tags._manylinux, "_glibc_version_string", lambda: "2.17") monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr( sys, "executable", os.path.join( os.path.dirname(__file__), "manylinux", "hello-world-x86_64-i386", ), ) platforms = list(tags._linux_platforms(is_32bit=True)) expected = [ "manylinux_2_17_i686", "manylinux2014_i686", "manylinux_2_16_i686", "manylinux_2_15_i686", "manylinux_2_14_i686", "manylinux_2_13_i686", "manylinux_2_12_i686", "manylinux2010_i686", "manylinux_2_11_i686", "manylinux_2_10_i686", "manylinux_2_9_i686", "manylinux_2_8_i686", "manylinux_2_7_i686", "manylinux_2_6_i686", "manylinux_2_5_i686", "manylinux1_i686", "linux_i686", ] assert platforms == expected
def test_linux_use_manylinux_compatible_none(self, monkeypatch, manylinux_module): def manylinux_compatible(tag_major, tag_minor, tag_arch): if tag_major == 2 and tag_minor < 25: return False return None monkeypatch.setattr(tags._manylinux, "_get_glibc_version", lambda: (2, 30)) monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr( manylinux_module, "manylinux_compatible", manylinux_compatible, raising=False, ) platforms = list(tags._linux_platforms(is_32bit=False)) expected = [ "manylinux_2_30_x86_64", "manylinux_2_29_x86_64", "manylinux_2_28_x86_64", "manylinux_2_27_x86_64", "manylinux_2_26_x86_64", "manylinux_2_25_x86_64", "linux_x86_64", ] assert platforms == expected
def test_linux_platforms_manylinux1(self, monkeypatch): monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux1") if platform.system() != "Linux": monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") platforms = list(tags._linux_platforms(is_32bit=False)) assert platforms == ["manylinux1_x86_64", "linux_x86_64"]
def test_linux_platforms_manylinux2014_armv6l(self, monkeypatch): monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux2014") monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_armv6l") platforms = list(tags._linux_platforms(is_32bit=True)) expected = ["linux_armv6l"] assert platforms == expected
def test_linux_platforms_manylinux1(monkeypatch): monkeypatch.setattr( tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux1" ) if platform.system() != "Linux": monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") platforms = tags._linux_platforms(is_32bit=False) assert platforms == ["manylinux1_x86_64", "linux_x86_64"]
def test_linux_platforms_32_64bit_on_64bit_os( self, arch, is_32bit, expected, monkeypatch ): monkeypatch.setattr(sysconfig, "get_platform", lambda: arch) monkeypatch.setattr(os, "confstr", lambda x: "glibc 2.20", raising=False) monkeypatch.setattr(tags._manylinux, "_is_compatible", lambda *args: False) linux_platform = list(tags._linux_platforms(is_32bit=is_32bit))[-1] assert linux_platform == expected
def test_linux_platforms_32bit_on_64bit_os(is_64bit_os, is_x86, monkeypatch): if platform.system() != "Linux" or not is_64bit_os or not is_x86: monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda *args: False) linux_platform = tags._linux_platforms(is_32bit=True)[-1] assert linux_platform == "linux_i686"
def test_linux_platforms_manylinux1(monkeypatch): monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux1") if platform.system() != "Linux": monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") platforms = tags._linux_platforms(is_32bit=False) arch = platform.machine() assert platforms == ["manylinux1_" + arch, "linux_" + arch]
def test_linux_platforms_manylinux2010(monkeypatch): monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux2010") if platform.system() != "Linux": monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") platforms = tags._linux_platforms(is_32bit=False) expected = ["manylinux2010_x86_64", "manylinux1_x86_64", "linux_x86_64"] assert platforms == expected
def test_linux_platforms_manylinux2014_armv6l(self, monkeypatch): monkeypatch.setattr( tags._manylinux, "_is_compatible", lambda name, _: name == "manylinux2014" ) monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_armv6l") monkeypatch.setattr(os, "confstr", lambda x: "glibc 2.20", raising=False) platforms = list(tags._linux_platforms(is_32bit=True)) expected = ["linux_armv6l"] assert platforms == expected
def test_linux_platforms_64bit_on_64bit_os(monkeypatch): is_64bit_os = distutils.util.get_platform().endswith("_x86_64") if platform.system() != "Linux" or not is_64bit_os: monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda *args: False) linux_platform = tags._linux_platforms(is_32bit=False)[-1] assert linux_platform == "linux_x86_64"
def test_linux_platforms_manylinux1(self, monkeypatch): monkeypatch.setattr( tags._manylinux, "_is_compatible", lambda name, *args: name == "manylinux1" ) monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(platform, "machine", lambda: "x86_64") monkeypatch.setattr(os, "confstr", lambda x: "glibc 2.20", raising=False) platforms = list(tags._linux_platforms(is_32bit=False)) arch = platform.machine() assert platforms == ["manylinux1_" + arch, "linux_" + arch]
def test_linux_platforms_manylinux2010(self, is_x86, monkeypatch): monkeypatch.setattr( tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux2010" ) if platform.system() != "Linux" or not is_x86: monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(platform, "machine", lambda: "x86_64") platforms = list(tags._linux_platforms(is_32bit=False)) arch = platform.machine() expected = ["manylinux2010_" + arch, "manylinux1_" + arch, "linux_" + arch] assert platforms == expected
def test_linux_platforms_manylinux2014_armhf_abi(self, monkeypatch): monkeypatch.setattr( tags, "_is_manylinux_compatible", lambda name, _: name == "manylinux2014" ) monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_armv7l") monkeypatch.setattr( sys, "executable", os.path.join(os.path.dirname(__file__), "hello-world-armv7l-armhf"), ) platforms = list(tags._linux_platforms(is_32bit=True)) expected = ["manylinux2014_armv7l", "linux_armv7l"] assert platforms == expected
def test_linux_platforms_not_manylinux_abi(self, monkeypatch, machine, abi, alt_machine): monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda name, _: True) monkeypatch.setattr(distutils.util, "get_platform", lambda: "linux_{}".format(machine)) monkeypatch.setattr( sys, "executable", os.path.join(os.path.dirname(__file__), "hello-world-{}-{}".format(machine, abi)), ) platforms = list(tags._linux_platforms(is_32bit=True)) expected = ["linux_{}".format(alt_machine)] assert platforms == expected
def test_sys_tags_linux_cpython(monkeypatch): if platform.python_implementation() != "CPython": monkeypatch.setattr(platform, "python_implementation", lambda: "CPython") monkeypatch.setattr(tags, "_cpython_abi", lambda py_version: "cp33m") if platform.system() != "Linux": monkeypatch.setattr(platform, "system", lambda: "Linux") monkeypatch.setattr(tags, "_linux_platforms", lambda: ["linux_x86_64"]) abi = tags._cpython_abi(sys.version_info[:2]) platforms = tags._linux_platforms() result = list(tags.sys_tags()) expected_interpreter = "cp{major}{minor}".format( major=sys.version_info[0], minor=sys.version_info[1] ) assert result[0] == tags.Tag(expected_interpreter, abi, platforms[0]) expected = tags.Tag("py{}0".format(sys.version_info[0]), "none", "any") assert result[-1] == expected
def test_skip_manylinux_2014(self, monkeypatch, manylinux_module): monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_ppc64") monkeypatch.setattr(tags._manylinux, "_get_glibc_version", lambda: (2, 20)) monkeypatch.setattr( manylinux_module, "manylinux2014_compatible", False, raising=False ) expected = [ "manylinux_2_20_ppc64", "manylinux_2_19_ppc64", "manylinux_2_18_ppc64", # "manylinux2014_ppc64", # this one is skipped # "manylinux_2_17_ppc64", # this one is also skipped "linux_ppc64", ] platforms = list(tags._linux_platforms()) assert platforms == expected
def test_linux_cpython(self, mock_interpreter_name, monkeypatch): if mock_interpreter_name("CPython"): monkeypatch.setattr(tags, "_cpython_abis", lambda *a: ["cp33m"]) if platform.system() != "Linux": monkeypatch.setattr(platform, "system", lambda: "Linux") monkeypatch.setattr(tags, "_linux_platforms", lambda: ["linux_x86_64"]) abis = list(tags._cpython_abis(sys.version_info[:2])) platforms = list(tags._linux_platforms()) result = list(tags.sys_tags()) expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2]) assert len(abis) == 1 assert result[0] == tags.Tag(expected_interpreter, abis[0], platforms[0]) expected = tags.Tag( "py" + tags._version_nodot((sys.version_info[0], 0)), "none", "any" ) assert result[-1] == expected
def test_sys_tags_linux_cpython(monkeypatch): if platform.python_implementation() != "CPython": monkeypatch.setattr(platform, "python_implementation", lambda: "CPython") monkeypatch.setattr(tags, "_cpython_abi", lambda py_version: "cp33m") if platform.system() != "Linux": monkeypatch.setattr(platform, "system", lambda: "Linux") monkeypatch.setattr(tags, "_linux_platforms", lambda: ["linux_x86_64"]) abi = tags._cpython_abi(sys.version_info[:2]) platforms = tags._linux_platforms() result = list(tags.sys_tags()) expected_interpreter = "cp{major}{minor}".format(major=sys.version_info[0], minor=sys.version_info[1]) assert result[0] == tags.Tag(expected_interpreter, abi, platforms[0]) expected = tags.Tag("py{}0".format(sys.version_info[0]), "none", "any") assert result[-1] == expected
def test_linux_platforms_not_manylinux_abi( self, monkeypatch, manylinux_module, machine, abi, alt_machine ): monkeypatch.setattr(sysconfig, "get_platform", lambda: f"linux_{machine}") monkeypatch.setattr( sys, "executable", os.path.join( os.path.dirname(__file__), "manylinux", f"hello-world-{machine}-{abi}", ), ) platforms = list(tags._linux_platforms(is_32bit=True)) expected = [f"linux_{alt_machine}"] assert platforms == expected
def test_linux_platforms_manylinux2014_armhf_abi(self, monkeypatch): monkeypatch.setattr(tags._manylinux, "_glibc_version_string", lambda: "2.30") monkeypatch.setattr( tags._manylinux, "_is_compatible", lambda name, *args: name == "manylinux2014", ) monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_armv7l") monkeypatch.setattr( sys, "executable", os.path.join( os.path.dirname(__file__), "manylinux", "hello-world-armv7l-armhf", ), ) platforms = list(tags._linux_platforms(is_32bit=True)) expected = ["manylinux2014_armv7l", "linux_armv7l"] assert platforms == expected
def test_linux_platforms_manylinux_glibc3(self, monkeypatch): # test for a future glic 3.x version monkeypatch.setattr(tags._manylinux, "_glibc_version_string", lambda: "3.2") monkeypatch.setattr(tags._manylinux, "_is_compatible", lambda name, *args: True) monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_aarch64") monkeypatch.setattr( sys, "executable", os.path.join( os.path.dirname(__file__), "manylinux", "hello-world-aarch64", ), ) platforms = list(tags._linux_platforms(is_32bit=False)) expected = ( ["manylinux_3_2_aarch64", "manylinux_3_1_aarch64", "manylinux_3_0_aarch64"] + [f"manylinux_2_{i}_aarch64" for i in range(50, 16, -1)] + ["manylinux2014_aarch64", "linux_aarch64"] ) assert platforms == expected
def test_linux_platforms_musllinux( self, monkeypatch, native_arch, cross32_arch, musl_version, cross32 ): fake_executable = str( pathlib.Path(__file__) .parent.joinpath("musllinux", f"musl-{native_arch}") .resolve() ) monkeypatch.setattr(tags._musllinux.sys, "executable", fake_executable) monkeypatch.setattr(sysconfig, "get_platform", lambda: f"linux_{native_arch}") monkeypatch.setattr(tags._manylinux, "platform_tags", lambda *_: ()) recorder = pretend.call_recorder(lambda _: musl_version) monkeypatch.setattr(tags._musllinux, "_get_musl_version", recorder) platforms = list(tags._linux_platforms(is_32bit=cross32)) target_arch = cross32_arch if cross32 else native_arch expected = [ f"musllinux_{musl_version[0]}_{minor}_{target_arch}" for minor in range(musl_version[1], -1, -1) ] + [f"linux_{target_arch}"] assert platforms == expected assert recorder.calls == [pretend.call(fake_executable)]
def test_linux_platforms_manylinux_unsupported(self, monkeypatch): monkeypatch.setattr(sysconfig, "get_platform", lambda: "linux_x86_64") monkeypatch.setattr(os, "confstr", lambda x: "glibc 2.20", raising=False) monkeypatch.setattr(tags._manylinux, "_is_compatible", lambda *args: False) linux_platform = list(tags._linux_platforms(is_32bit=False)) assert linux_platform == ["linux_x86_64"]