From d66f799c239d3756c865fa8af7c4a8a02ed33d24 Mon Sep 17 00:00:00 2001 From: "finswimmer77@gmail.com" Date: Sun, 24 Nov 2019 10:01:13 +0100 Subject: [PATCH] fix: exclude subpackage from `setup.py` if `__init__.py` is excluded Fixes: #1009 --- poetry/masonry/builders/sdist.py | 4 +++- tests/masonry/builders/test_sdist.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/poetry/masonry/builders/sdist.py b/poetry/masonry/builders/sdist.py index 7bb26c92ea6..29c6696884e 100644 --- a/poetry/masonry/builders/sdist.py +++ b/poetry/masonry/builders/sdist.py @@ -237,7 +237,9 @@ def find_nearest_pkg(rel_path): if from_top_level == ".": continue - is_subpkg = "__init__.py" in filenames + is_subpkg = "__init__.py" in filenames and not self.is_excluded( + Path(path, "__init__.py").relative_to(self._path) + ) if is_subpkg: subpkg_paths.add(from_top_level) parts = from_top_level.split(os.sep) diff --git a/tests/masonry/builders/test_sdist.py b/tests/masonry/builders/test_sdist.py index 4609c331990..510af423d07 100644 --- a/tests/masonry/builders/test_sdist.py +++ b/tests/masonry/builders/test_sdist.py @@ -465,3 +465,18 @@ def test_proper_python_requires_if_three_digits_precision_version_specified(): parsed = p.parsestr(to_str(pkg_info)) assert parsed["Requires-Python"] == "==2.7.15" + + +def test_excluded_subpackage(): + poetry = Factory().create_poetry(project("excluded_subpackage")) + + builder = SdistBuilder(poetry, NullEnv(), NullIO()) + 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["packages"] == ["example"]