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
|
from contextlib import contextmanager
import os
import os.path as osp
import tarfile
from testpath import assert_isfile, assert_isdir
from testpath.tempdir import TemporaryDirectory
import zipfile
from flit_core import buildapi
samples_dir = osp.join(osp.dirname(__file__), 'samples')
@contextmanager
def cwd(directory):
prev = os.getcwd()
os.chdir(directory)
try:
yield
finally:
os.chdir(prev)
def test_get_build_requires():
# This module can be inspected (for docstring & __version__) without
# importing it, so there are no build dependencies.
with cwd(osp.join(samples_dir,'pep517')):
assert buildapi.get_requires_for_build_wheel() == []
assert buildapi.get_requires_for_build_editable() == []
assert buildapi.get_requires_for_build_sdist() == []
def test_get_build_requires_pep621_nodynamic():
# This module isn't inspected because version & description are specified
# as static metadata in pyproject.toml, so there are no build dependencies
with cwd(osp.join(samples_dir, 'pep621_nodynamic')):
assert buildapi.get_requires_for_build_wheel() == []
assert buildapi.get_requires_for_build_editable() == []
assert buildapi.get_requires_for_build_sdist() == []
def test_get_build_requires_import():
# This one has to be imported, so its runtime dependencies are also
# build dependencies.
expected = ["numpy >=1.16.0"]
with cwd(osp.join(samples_dir, 'constructed_version')):
assert buildapi.get_requires_for_build_wheel() == expected
assert buildapi.get_requires_for_build_editable() == expected
assert buildapi.get_requires_for_build_sdist() == expected
def test_build_wheel():
with TemporaryDirectory() as td, cwd(osp.join(samples_dir,'pep517')):
filename = buildapi.build_wheel(td)
assert filename.endswith('.whl'), filename
assert_isfile(osp.join(td, filename))
assert zipfile.is_zipfile(osp.join(td, filename))
with zipfile.ZipFile(osp.join(td, filename)) as zip:
assert "module1.py" in zip.namelist()
assert "module1.pth" not in zip.namelist()
def test_build_wheel_pep621():
with TemporaryDirectory() as td, cwd(osp.join(samples_dir, 'pep621')):
filename = buildapi.build_wheel(td)
assert filename.endswith('.whl'), filename
assert_isfile(osp.join(td, filename))
assert zipfile.is_zipfile(osp.join(td, filename))
def test_build_editable():
with TemporaryDirectory() as td, cwd(osp.join(samples_dir,'pep517')):
filename = buildapi.build_editable(td)
assert filename.endswith('.whl'), filename
assert_isfile(osp.join(td, filename))
assert zipfile.is_zipfile(osp.join(td, filename))
with zipfile.ZipFile(osp.join(td, filename)) as zip:
assert "module1.py" not in zip.namelist()
assert "module1.pth" in zip.namelist()
def test_build_sdist():
with TemporaryDirectory() as td, cwd(osp.join(samples_dir,'pep517')):
filename = buildapi.build_sdist(td)
assert filename.endswith('.tar.gz'), filename
assert_isfile(osp.join(td, filename))
assert tarfile.is_tarfile(osp.join(td, filename))
def test_prepare_metadata_for_build_wheel():
with TemporaryDirectory() as td, cwd(osp.join(samples_dir,'pep517')):
dirname = buildapi.prepare_metadata_for_build_wheel(td)
assert dirname.endswith('.dist-info'), dirname
assert_isdir(osp.join(td, dirname))
assert_isfile(osp.join(td, dirname, 'METADATA'))
def test_prepare_metadata_for_build_editable():
with TemporaryDirectory() as td, cwd(osp.join(samples_dir,'pep517')):
dirname = buildapi.prepare_metadata_for_build_editable(td)
assert dirname.endswith('.dist-info'), dirname
assert_isdir(osp.join(td, dirname))
assert_isfile(osp.join(td, dirname, 'METADATA'))
|