def test_src_excluded_nested_data(): module_path = fixtures_dir / "exclude_nested_data_toml" poetry = Factory().create_poetry(module_path) builder = SdistBuilder(poetry) builder.build() sdist = module_path / "dist" / "my-package-1.2.3.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: names = tar.getnames() assert len(names) == len(set(names)) assert "my-package-1.2.3/LICENSE" in names assert "my-package-1.2.3/README.rst" in names assert "my-package-1.2.3/pyproject.toml" in names assert "my-package-1.2.3/setup.py" in names assert "my-package-1.2.3/PKG-INFO" in names assert "my-package-1.2.3/my_package/__init__.py" in names assert "my-package-1.2.3/my_package/data/sub_data/data2.txt" not in names assert "my-package-1.2.3/my_package/data/sub_data/data3.txt" not in names assert "my-package-1.2.3/my_package/data/data1.txt" not in names assert "my-package-1.2.3/my_package/data/data2.txt" in names assert "my-package-1.2.3/my_package/puplic/publicdata.txt" in names assert "my-package-1.2.3/my_package/public/item1/itemdata1.txt" not in names assert ( "my-package-1.2.3/my_package/public/item1/subitem/subitemdata.txt" not in names) assert "my-package-1.2.3/my_package/public/item2/itemdata2.txt" not in names
def test_prelease(): poetry = Factory().create_poetry(project("prerelease")) builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "prerelease" / "dist" / "prerelease-0.1b1.tar.gz" assert sdist.exists()
def test_default_with_excluded_data(mocker): # Patch git module to return specific excluded files p = mocker.patch("poetry.core.vcs.git.Git.get_ignored_files") p.return_value = [ ( ( Path(__file__).parent / "fixtures" / "default_with_excluded_data" / "my_package" / "data" / "sub_data" / "data2.txt" ) .relative_to(project("default_with_excluded_data")) .as_posix() ) ] poetry = Factory().create_poetry(project("default_with_excluded_data")) builder = SdistBuilder(poetry) # Check setup.py setup = builder.build_setup() setup_ast = ast.parse(setup) setup_ast.body = [n for n in setup_ast.body if isinstance(n, ast.Assign)] ns = {} exec(compile(setup_ast, filename="setup.py", mode="exec"), ns) assert "package_dir" not in ns assert ns["packages"] == ["my_package"] assert ns["package_data"] == { "": ["*"], "my_package": ["data/*", "data/sub_data/data3.txt"], } builder.build() sdist = ( fixtures_dir / "default_with_excluded_data" / "dist" / "my-package-1.2.3.tar.gz" ) assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: names = tar.getnames() assert len(names) == len(set(names)) assert "my-package-1.2.3/LICENSE" in names assert "my-package-1.2.3/README.rst" in names assert "my-package-1.2.3/my_package/__init__.py" in names assert "my-package-1.2.3/my_package/data/data1.txt" in names assert "my-package-1.2.3/pyproject.toml" in names assert "my-package-1.2.3/setup.py" in names assert "my-package-1.2.3/PKG-INFO" in names # all last modified times should be set to a valid timestamp for tarinfo in tar.getmembers(): assert 0 < tarinfo.mtime
def test_module(): poetry = Factory().create_poetry(project("module1")) builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "module1" / "dist" / "module1-0.1.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert "module1-0.1/module1.py" in tar.getnames()
def test_package(): poetry = Factory().create_poetry(project("complete")) builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "complete" / "dist" / "my-package-1.2.3.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert "my-package-1.2.3/LICENSE" in tar.getnames()
def test_sdist_mtime_zero(): poetry = Factory().create_poetry(project("module1")) builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "module1" / "dist" / "module1-0.1.tar.gz" assert sdist.exists() with gzip.open(str(sdist), "rb") as gz: gz.read(100) assert gz.mtime == 0
def test_with_c_extensions_src_layout(): poetry = Factory().create_poetry(project("src_extended")) builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "src_extended" / "dist" / "extended-0.1.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert "extended-0.1/build.py" in tar.getnames() assert "extended-0.1/src/extended/extended.c" in tar.getnames()
def test_includes(): poetry = Factory().create_poetry(project("with-include")) builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "with-include" / "dist" / "with-include-1.2.3.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert "with-include-1.2.3/extra_dir/vcs_excluded.txt" in tar.getnames( ) assert "with-include-1.2.3/notes.txt" in tar.getnames()
def test_sdist_package_pep_561_stub_only(): root = fixtures_dir / "pep_561_stub_only" poetry = Factory().create_poetry(root) builder = SdistBuilder(poetry) builder.build() sdist = root / "dist" / "pep-561-stubs-0.1.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: names = tar.getnames() assert "pep-561-stubs-0.1/pkg-stubs/__init__.pyi" in names assert "pep-561-stubs-0.1/pkg-stubs/module.pyi" in names assert "pep-561-stubs-0.1/pkg-stubs/subpkg/__init__.pyi" in names
def test_includes_with_inline_table(): poetry = Factory().create_poetry(project("with_include_inline_table")) builder = SdistBuilder(poetry) builder.build() sdist = (fixtures_dir / "with_include_inline_table" / "dist" / "with-include-1.2.3.tar.gz") assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert "with-include-1.2.3/wheel_only.txt" not in tar.getnames() assert "with-include-1.2.3/tests/__init__.py" in tar.getnames() assert "with-include-1.2.3/tests/test_foo/test.py" in tar.getnames()
def test_sdist_reproducibility(): poetry = Factory().create_poetry(project("complete")) hashes = set() for _ in range(2): builder = SdistBuilder(poetry) builder.build() sdist = fixtures_dir / "complete" / "dist" / "my-package-1.2.3.tar.gz" assert sdist.exists() hashes.add(hashlib.sha256(sdist.read_bytes()).hexdigest()) assert len(hashes) == 1
def test_sdist_disable_setup_py(): module_path = fixtures_dir / "disable_setup_py" poetry = Factory().create_poetry(module_path) builder = SdistBuilder(poetry) builder.build() sdist = module_path / "dist" / "my-package-1.2.3.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert set(tar.getnames()) == { "my-package-1.2.3/README.rst", "my-package-1.2.3/pyproject.toml", "my-package-1.2.3/PKG-INFO", "my-package-1.2.3/my_package/__init__.py", }
def test_with_src_module_file(): poetry = Factory().create_poetry(project("source_file")) builder = SdistBuilder(poetry) # Check setup.py setup = builder.build_setup() setup_ast = ast.parse(setup) setup_ast.body = [n for n in setup_ast.body if isinstance(n, ast.Assign)] ns = {} exec(compile(setup_ast, filename="setup.py", mode="exec"), ns) assert ns["package_dir"] == {"": "src"} assert ns["modules"] == ["module_src"] builder.build() sdist = fixtures_dir / "source_file" / "dist" / "module-src-0.1.tar.gz" assert sdist.exists() with tarfile.open(str(sdist), "r") as tar: assert "module-src-0.1/src/module_src.py" in tar.getnames()