1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
from os.path import abspath, dirname
from os.path import join as pjoin
import pytest
from testpath import assert_isfile, modified_env
from testpath.tempdir import TemporaryDirectory
from pyproject_hooks import BuildBackendHookCaller, HookMissing
from tests.compat import tomllib
SAMPLES_DIR = pjoin(dirname(abspath(__file__)), "samples")
BUILDSYS_PKGS = pjoin(SAMPLES_DIR, "buildsys_pkgs")
def get_hooks(pkg):
source_dir = pjoin(SAMPLES_DIR, pkg)
with open(pjoin(source_dir, "pyproject.toml"), "rb") as f:
data = tomllib.load(f)
return BuildBackendHookCaller(source_dir, data["build-system"]["build-backend"])
def test_get_requires_for_build_wheel():
hooks = get_hooks("pkg2")
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
res = hooks.get_requires_for_build_wheel({})
assert res == []
def test_get_requires_for_build_editable():
hooks = get_hooks("pkg2")
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
res = hooks.get_requires_for_build_editable({})
assert res == []
def test_get_requires_for_build_sdist():
hooks = get_hooks("pkg2")
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
res = hooks.get_requires_for_build_sdist({})
assert res == []
def test_prepare_metadata_for_build_wheel():
hooks = get_hooks("pkg2")
with TemporaryDirectory() as metadatadir:
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
hooks.prepare_metadata_for_build_wheel(metadatadir, {})
assert_isfile(pjoin(metadatadir, "pkg2-0.5.dist-info", "METADATA"))
def test_prepare_metadata_for_build_editable():
hooks = get_hooks("pkg3")
with TemporaryDirectory() as metadatadir:
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
hooks.prepare_metadata_for_build_editable(metadatadir, {})
assert_isfile(pjoin(metadatadir, "pkg3-0.5.dist-info", "METADATA"))
def test_prepare_metadata_for_build_editable_missing_build_editable():
hooks = get_hooks("pkg2")
with TemporaryDirectory() as metadatadir:
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
# pkg2's build system does not have build_editable
with pytest.raises(HookMissing) as exc_info:
hooks.prepare_metadata_for_build_editable(metadatadir, {})
e = exc_info.value
assert "build_editable" == e.hook_name
assert "build_editable" == str(e)
def test_prepare_metadata_for_build_wheel_no_fallback():
hooks = get_hooks("pkg2")
with TemporaryDirectory() as metadatadir:
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
with pytest.raises(HookMissing) as exc_info:
hooks.prepare_metadata_for_build_wheel(
metadatadir, {}, _allow_fallback=False
)
e = exc_info.value
assert "prepare_metadata_for_build_wheel" == e.hook_name
assert "prepare_metadata_for_build_wheel" in str(e)
def test_prepare_metadata_for_build_editable_no_fallback():
hooks = get_hooks("pkg2")
with TemporaryDirectory() as metadatadir:
with modified_env({"PYTHONPATH": BUILDSYS_PKGS}):
with pytest.raises(HookMissing) as exc_info:
hooks.prepare_metadata_for_build_editable(
metadatadir, {}, _allow_fallback=False
)
e = exc_info.value
assert "prepare_metadata_for_build_editable" == e.hook_name
assert "prepare_metadata_for_build_editable" in str(e)
|