Skip to content

Commit

Permalink
feat: Add support for dependency groups which include other groups only
Browse files Browse the repository at this point in the history
  • Loading branch information
finswimmer committed Feb 10, 2025
1 parent a1055a3 commit 2f8aabd
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/poetry/core/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ def _configure_package_dependencies(
cls._add_package_group_dependencies(
package=package,
group=group,
dependencies=group_config["dependencies"],
dependencies=group_config.get("dependencies", {}),
)

for group_name, group_config in tool_poetry["group"].items():
Expand Down
13 changes: 11 additions & 2 deletions src/poetry/core/json/schemas/poetry-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,17 @@
"^[a-zA-Z-_.0-9]+$": {
"type": "object",
"description": "This represents a single dependency group",
"required": [
"dependencies"
"anyOf": [
{
"required": [
"dependencies"
]
},
{
"required": [
"include-groups"
]
}
],
"properties": {
"optional": {
Expand Down
34 changes: 33 additions & 1 deletion tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -1153,5 +1153,37 @@ def test_create_poetry_with_unknown_nested_dependency_groups(
with pytest.raises(
ValueError, match="Group 'dev' includes group 'testing' which is not defined"
):
_ = Factory().create_poetry(fixtures_dir / "project_with_unknown_nested_group")
_ = Factory().create_poetry(temporary_directory)


def test_create_poetry_with_included_groups_only(temporary_directory: Path) -> None:
pyproject_toml = temporary_directory / "pyproject.toml"
content = """\
[project]
name = "my-package"
version = "1.2.3"
[tool.poetry.group.lint.dependencies]
black = "*"
[tool.poetry.group.testing.dependencies]
pytest = "*"
[tool.poetry.group.all]
include-groups = [
"lint",
"testing",
]
"""
pyproject_toml.write_text(content)

poetry = Factory().create_poetry(temporary_directory)
assert len(poetry.package.all_requires) == 4
assert [
(dep.name, ",".join(dep.groups)) for dep in poetry.package.all_requires
] == [
("black", "lint"),
("pytest", "testing"),
("black", "all"),
("pytest", "all"),
]

0 comments on commit 2f8aabd

Please sign in to comment.