From e9773df72f43b070309b795aa6ba9cfc59b9a04b Mon Sep 17 00:00:00 2001 From: "finswimmer77@gmail.com" Date: Sun, 24 Nov 2019 10:01:13 +0100 Subject: [PATCH 1/5] 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 c906f4c473d..01475bdcb01 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 = any([filename.endswith(".py") for filename in filenames]) + is_subpkg = any([filename.endswith(".py") for filename 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 670289f9fb0..ed2ded503df 100644 --- a/tests/masonry/builders/test_sdist.py +++ b/tests/masonry/builders/test_sdist.py @@ -473,3 +473,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"] From b1ecd4a5bbe9460de22c257efc2b392576b5e3c3 Mon Sep 17 00:00:00 2001 From: "finswimmer77@gmail.com" Date: Sun, 24 Nov 2019 10:28:48 +0100 Subject: [PATCH 2/5] fix: added missing test data --- .../fixtures/excluded_subpackage/README.rst | 2 ++ .../excluded_subpackage/example/__init__.py | 1 + .../example/test/__init__.py | 0 .../example/test/excluded.py | 5 +++++ .../excluded_subpackage/pyproject.toml | 18 ++++++++++++++++++ 5 files changed, 26 insertions(+) create mode 100644 tests/masonry/builders/fixtures/excluded_subpackage/README.rst create mode 100644 tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py create mode 100644 tests/masonry/builders/fixtures/excluded_subpackage/example/test/__init__.py create mode 100644 tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py create mode 100644 tests/masonry/builders/fixtures/excluded_subpackage/pyproject.toml diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/README.rst b/tests/masonry/builders/fixtures/excluded_subpackage/README.rst new file mode 100644 index 00000000000..b00640203c5 --- /dev/null +++ b/tests/masonry/builders/fixtures/excluded_subpackage/README.rst @@ -0,0 +1,2 @@ +My Package +========== \ No newline at end of file diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py b/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py new file mode 100644 index 00000000000..b794fd409a5 --- /dev/null +++ b/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py @@ -0,0 +1 @@ +__version__ = '0.1.0' diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/example/test/__init__.py b/tests/masonry/builders/fixtures/excluded_subpackage/example/test/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py b/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py new file mode 100644 index 00000000000..fa16c162585 --- /dev/null +++ b/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py @@ -0,0 +1,5 @@ +from .. import __version__ + + +def test_version(): + assert __version__ == "0.1.0" \ No newline at end of file diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/pyproject.toml b/tests/masonry/builders/fixtures/excluded_subpackage/pyproject.toml new file mode 100644 index 00000000000..3852bb831fa --- /dev/null +++ b/tests/masonry/builders/fixtures/excluded_subpackage/pyproject.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "example" +version = "0.1.0" +description = "" +authors = ["Sébastien Eustace "] +exclude = [ + "**/test/**/*", +] + +[tool.poetry.dependencies] +python = "^3.6" + +[tool.poetry.dev-dependencies] +pytest = "^3.0" + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" From 7cd6e5ece5769922299cc15dba61a88f163c746d Mon Sep 17 00:00:00 2001 From: "finswimmer77@gmail.com" Date: Sun, 24 Nov 2019 12:49:48 +0100 Subject: [PATCH 3/5] fix: lint test data --- .../builders/fixtures/excluded_subpackage/example/__init__.py | 2 +- .../fixtures/excluded_subpackage/example/test/excluded.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py b/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py index b794fd409a5..3dc1f76bc69 100644 --- a/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py +++ b/tests/masonry/builders/fixtures/excluded_subpackage/example/__init__.py @@ -1 +1 @@ -__version__ = '0.1.0' +__version__ = "0.1.0" diff --git a/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py b/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py index fa16c162585..bf6e1f8962f 100644 --- a/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py +++ b/tests/masonry/builders/fixtures/excluded_subpackage/example/test/excluded.py @@ -2,4 +2,4 @@ def test_version(): - assert __version__ == "0.1.0" \ No newline at end of file + assert __version__ == "0.1.0" From b6f41292fe1284e73c904df2169501ea793f87c4 Mon Sep 17 00:00:00 2001 From: "finswimmer77@gmail.com" Date: Fri, 24 Jan 2020 13:27:32 +0100 Subject: [PATCH 4/5] change (sdist.git): exclude folders with no python file --- poetry/masonry/builders/sdist.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/poetry/masonry/builders/sdist.py b/poetry/masonry/builders/sdist.py index 01475bdcb01..7383e12dc3f 100644 --- a/poetry/masonry/builders/sdist.py +++ b/poetry/masonry/builders/sdist.py @@ -237,8 +237,13 @@ def find_nearest_pkg(rel_path): if from_top_level == ".": continue - is_subpkg = any([filename.endswith(".py") for filename in filenames]) and not self.is_excluded( - Path(path, "__init__.py").relative_to(self._path) + is_subpkg = any( + [filename.endswith(".py") for filename in filenames] + ) and not all( + [ + self.is_excluded(Path(path, filename).relative_to(self._path)) + for filename in filenames if filename.endswith(".py") + ] ) if is_subpkg: subpkg_paths.add(from_top_level) From ca7c3b822329233697e715c5fbe3711a7badd182 Mon Sep 17 00:00:00 2001 From: "finswimmer77@gmail.com" Date: Fri, 24 Jan 2020 13:31:05 +0100 Subject: [PATCH 5/5] fix (sdist.git): make black happy --- poetry/masonry/builders/sdist.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/poetry/masonry/builders/sdist.py b/poetry/masonry/builders/sdist.py index 7383e12dc3f..54089222f8c 100644 --- a/poetry/masonry/builders/sdist.py +++ b/poetry/masonry/builders/sdist.py @@ -242,7 +242,8 @@ def find_nearest_pkg(rel_path): ) and not all( [ self.is_excluded(Path(path, filename).relative_to(self._path)) - for filename in filenames if filename.endswith(".py") + for filename in filenames + if filename.endswith(".py") ] ) if is_subpkg: