Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove dev-dependencies resolution from the build #101

Merged
merged 4 commits into from
Oct 22, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions poetry/core/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ class Factory(object):
Factory class to create various elements needed by Poetry.
"""

def create_poetry(self, cwd=None): # type: (Optional[Path]) -> Poetry
def create_poetry(
self, cwd=None, with_dev=True
): # type: (Optional[Path]. bool) -> Poetry
poetry_file = self.locate(cwd)
local_config = PyProjectTOML(path=poetry_file).poetry_config

Expand Down Expand Up @@ -91,7 +93,7 @@ def create_poetry(self, cwd=None): # type: (Optional[Path]) -> Poetry
self.create_dependency(name, constraint, root_dir=package.root_dir)
)

if "dev-dependencies" in local_config:
if with_dev and "dev-dependencies" in local_config:
for name, constraint in local_config["dev-dependencies"].items():
if isinstance(constraint, list):
for _constraint in constraint:
Expand Down
6 changes: 3 additions & 3 deletions poetry/core/masonry/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def get_requires_for_build_wheel(config_settings=None):


def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
poetry = Factory().create_poetry(Path(".").resolve())
poetry = Factory().create_poetry(Path(".").resolve(), with_dev=False)
abn marked this conversation as resolved.
Show resolved Hide resolved
builder = WheelBuilder(poetry)

dist_info = Path(metadata_directory, builder.dist_info)
Expand All @@ -52,14 +52,14 @@ def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):

def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
"""Builds a wheel, places it in wheel_directory"""
poetry = Factory().create_poetry(Path(".").resolve())
poetry = Factory().create_poetry(Path(".").resolve(), with_dev=False)
abn marked this conversation as resolved.
Show resolved Hide resolved

return unicode(WheelBuilder.make_in(poetry, Path(wheel_directory)))


def build_sdist(sdist_directory, config_settings=None):
"""Builds an sdist, places it in sdist_directory"""
poetry = Factory().create_poetry(Path(".").resolve())
poetry = Factory().create_poetry(Path(".").resolve(), with_dev=False)

path = SdistBuilder(poetry).build(Path(sdist_directory))

Expand Down
13 changes: 13 additions & 0 deletions tests/fixtures/project_with_invalid_dev_deps/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[tool.poetry]
abn marked this conversation as resolved.
Show resolved Hide resolved
name = "my-package"
version = "1.2.3"
description = "Some description."
authors = ["Awesome Hacker <[email protected]>"]
license = "MIT"

[tool.poetry.dependencies]

[tool.poetry.extras]

[tool.poetry.dev-dependencies]
mylib = { path = "../mylib", develop = true}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[tool.poetry]
name = "with_bad_path_dep"
version = "1.2.3"
description = "Some description."
authors = ["Awesome Hacker <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.6"
bogus = { path = "../only/in/dev", develop = true }
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[tool.poetry]
name = "with_bad_path_dev_dep"
version = "1.2.3"
description = "Some description."
authors = ["Awesome Hacker <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.6"

[tool.poetry.dev-dependencies]
bogus = { path = "../only/in/dev", develop = true }
45 changes: 45 additions & 0 deletions tests/masonry/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,21 @@ def test_build_wheel_with_include():
)


def test_build_wheel_with_bad_path_dev_dep_succeeds():
with temporary_directory() as tmp_dir, cwd(
os.path.join(fixtures, "with_bad_path_dev_dep")
):
api.build_wheel(tmp_dir)


def test_build_wheel_with_bad_path_dep_fails():
with pytest.raises(ValueError) as err, temporary_directory() as tmp_dir, cwd(
os.path.join(fixtures, "with_bad_path_dep")
):
api.build_wheel(tmp_dir)
assert "does not exist" in str(err.value)


@pytest.mark.skipif(
sys.platform == "win32"
and sys.version_info <= (3, 6)
Expand Down Expand Up @@ -101,6 +116,21 @@ def test_build_sdist_with_include():
)


def test_build_sdist_with_bad_path_dev_dep_succeeds():
with temporary_directory() as tmp_dir, cwd(
os.path.join(fixtures, "with_bad_path_dev_dep")
):
api.build_sdist(tmp_dir)


def test_build_sdist_with_bad_path_dep_fails():
with pytest.raises(ValueError) as err, temporary_directory() as tmp_dir, cwd(
os.path.join(fixtures, "with_bad_path_dep")
):
api.build_sdist(tmp_dir)
assert "does not exist" in str(err.value)


def test_prepare_metadata_for_build_wheel():
entry_points = """\
[console_scripts]
Expand Down Expand Up @@ -170,3 +200,18 @@ def test_prepare_metadata_for_build_wheel():

with (dist_info / "METADATA").open(encoding="utf-8") as f:
assert metadata == decode(f.read())


def test_prepare_metadata_for_build_wheel_with_bad_path_dev_dep_succeeds():
with temporary_directory() as tmp_dir, cwd(
os.path.join(fixtures, "with_bad_path_dev_dep")
):
api.prepare_metadata_for_build_wheel(tmp_dir)


def test_prepare_metadata_for_build_wheel_with_bad_path_dep_succeeds():
with pytest.raises(ValueError) as err, temporary_directory() as tmp_dir, cwd(
os.path.join(fixtures, "with_bad_path_dep")
):
api.prepare_metadata_for_build_wheel(tmp_dir)
assert "does not exist" in str(err.value)
18 changes: 18 additions & 0 deletions tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,3 +199,21 @@ def test_create_poetry_fails_on_invalid_configuration():
- 'description' is a required property
"""
assert expected == str(e.value)


def test_create_poetry_omits_dev_dependencies_iff_with_dev_is_false():
poetry = Factory().create_poetry(fixtures_dir / "sample_project", with_dev=False)
assert not any(r for r in poetry.package.dev_requires if "pytest" in str(r))

poetry = Factory().create_poetry(fixtures_dir / "sample_project")
assert any(r for r in poetry.package.dev_requires if "pytest" in str(r))


def test_create_poetry_fails_with_invalid_dev_dependencies_iff_with_dev_is_true():
with pytest.raises(ValueError) as err:
Factory().create_poetry(fixtures_dir / "project_with_invalid_dev_deps")
assert "does not exist" in str(err.value)

Factory().create_poetry(
fixtures_dir / "project_with_invalid_dev_deps", with_dev=False
)