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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
import pathlib
import sys
import pytest
def _make_sdist(filename=None, metadata_version=None):
from pkginfo.sdist import SDist
if metadata_version is not None:
return SDist(filename, metadata_version)
return SDist(filename)
def _make_unpacked_sdist(filename=None, metadata_version=None):
from pkginfo.sdist import UnpackedSDist
if metadata_version is not None:
return UnpackedSDist(filename, metadata_version)
return UnpackedSDist(filename)
def _check_sample(sdist, filename):
assert(sdist.filename == filename)
assert(sdist.name == 'mypackage')
assert(sdist.version == '0.1')
assert(sdist.keywords == None)
assert(list(sdist.supported_platforms) == [])
def _check_classifiers(sdist):
assert(
list(sdist.classifiers) == [
'Development Status :: 4 - Beta',
'Environment :: Console (Text Based)',
]
)
def _top_dir(tempdir):
file_paths = list(tempdir.glob("*"))
assert len(file_paths) == 1
return file_paths[0]
def _unpack(tempdir, filename):
from pkginfo.sdist import SDist
# Work around Python 3.12 tarfile warning.
kwargs = {}
if sys.version_info >= (3, 12):
fn_path = pathlib.Path(filename)
if ".tar" in fn_path.suffixes:
kwargs["filter"] = "data"
archive, _, _ = SDist._get_archive(filename)
try:
archive.extractall(tempdir, **kwargs)
finally:
archive.close()
@pytest.fixture()
def unpacked_dir(temp_dir, archive):
_unpack(temp_dir, archive)
return _top_dir(temp_dir)
@pytest.mark.parametrize("factory", [_make_sdist, _make_unpacked_sdist])
def test_sdist_ctor_w_invalid_filename(examples_dir, factory):
from pkginfo.sdist import NoSuchFile
filename = examples_dir / 'nonesuch-0.1.tar.gz'
with pytest.raises(NoSuchFile):
factory(filename)
@pytest.mark.parametrize("factory", [_make_sdist, _make_unpacked_sdist])
def test_sdist_ctor_wo_PKG_INFO(examples_dir, factory):
if factory is _make_sdist:
from pkginfo.sdist import NoPkgInfo as to_raise
else:
from pkginfo.sdist import InvalidUnpackedSDist as to_raise
filename = examples_dir / 'nopkginfo-0.1.zip'
with pytest.raises(to_raise):
factory(filename)
@pytest.mark.parametrize("factory", [_make_sdist, _make_unpacked_sdist])
def test_sdist_ctor_w_invalid_PKG_INFO(examples_dir, factory):
if factory is _make_sdist:
from pkginfo.sdist import InvalidPkgInfo as to_raise
else:
from pkginfo.sdist import InvalidUnpackedSDist as to_raise
filename = examples_dir / 'invpkginfo-0.1.zip'
with pytest.raises(to_raise):
factory(filename)
@pytest.mark.parametrize("factory", [_make_sdist, _make_unpacked_sdist])
def test_sdist_ctor_w_bogus(examples_dir, factory):
filename = examples_dir / 'mypackage-0.1.bogus'
with pytest.raises(ValueError):
factory(filename, metadata_version='1.1')
def test_sdist_ctor_w_tarball_fooling_is_zipfile(examples_dir):
# See: https://bugs.launchpad.net/pkginfo/+bug/2084140
filename = examples_dir / 'broken-tarball.tar.gz'
sdist = _make_sdist(filename, metadata_version='1.1')
assert sdist.name == "ratarmount"
@pytest.mark.parametrize("w_metadata_version", [False, True])
def test_sdist_ctor_w_archive(archive, w_metadata_version):
if w_metadata_version:
sdist = _make_sdist(archive, metadata_version='1.1')
assert sdist.metadata_version == '1.1'
_check_classifiers(sdist)
else:
sdist = _make_sdist(archive)
assert sdist.metadata_version == '1.0'
_check_sample(sdist, archive)
@pytest.mark.parametrize("w_metadata_version", [False, True])
def test_sdist_ctor_w_unpacked_dir(unpacked_dir, w_metadata_version):
if w_metadata_version:
sdist = _make_unpacked_sdist(unpacked_dir, metadata_version='1.1')
assert sdist.metadata_version == '1.1'
_check_classifiers(sdist)
else:
sdist = _make_unpacked_sdist(unpacked_dir)
assert sdist.metadata_version == '1.0'
_check_sample(sdist, unpacked_dir)
@pytest.mark.parametrize("w_metadata_version", [False, True])
def test_sdist_ctor_w_unpacked_setup(unpacked_dir, w_metadata_version):
setup_py = unpacked_dir / "setup.py"
if w_metadata_version:
sdist = _make_unpacked_sdist(setup_py, metadata_version='1.1')
assert sdist.metadata_version == '1.1'
_check_classifiers(sdist)
else:
sdist = _make_unpacked_sdist(setup_py)
assert sdist.metadata_version == '1.0'
_check_sample(sdist, unpacked_dir)
|