Skip to content

Commit c6ff173

Browse files
committed
feat: Add support for dependency groups which include other groups only
1 parent 5117d20 commit c6ff173

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

src/poetry/core/factory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ def _configure_package_dependencies(
347347
cls._add_package_group_dependencies(
348348
package=package,
349349
group=group,
350-
dependencies=group_config["dependencies"],
350+
dependencies=group_config.get("dependencies", {}),
351351
)
352352

353353
for group_name, group_config in tool_poetry["group"].items():

src/poetry/core/json/schemas/poetry-schema.json

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,17 @@
171171
"^[a-zA-Z-_.0-9]+$": {
172172
"type": "object",
173173
"description": "This represents a single dependency group",
174-
"required": [
175-
"dependencies"
174+
"anyOf": [
175+
{
176+
"required": [
177+
"dependencies"
178+
]
179+
},
180+
{
181+
"required": [
182+
"include-groups"
183+
]
184+
}
176185
],
177186
"properties": {
178187
"optional": {

tests/test_factory.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,3 +1295,36 @@ def test_create_poetry_with_unknown_nested_dependency_groups(
12951295
error_type=ValueError,
12961296
temporary_directory=temporary_directory,
12971297
)
1298+
1299+
1300+
def test_create_poetry_with_included_groups_only(temporary_directory: Path) -> None:
1301+
pyproject_toml = temporary_directory / "pyproject.toml"
1302+
content = """\
1303+
[project]
1304+
name = "my-package"
1305+
version = "1.2.3"
1306+
1307+
[tool.poetry.group.lint.dependencies]
1308+
black = "*"
1309+
1310+
[tool.poetry.group.testing.dependencies]
1311+
pytest = "*"
1312+
1313+
[tool.poetry.group.all]
1314+
include-groups = [
1315+
"lint",
1316+
"testing",
1317+
]
1318+
"""
1319+
pyproject_toml.write_text(content)
1320+
1321+
poetry = Factory().create_poetry(temporary_directory)
1322+
assert len(poetry.package.all_requires) == 4
1323+
assert [
1324+
(dep.name, ",".join(dep.groups)) for dep in poetry.package.all_requires
1325+
] == [
1326+
("black", "lint"),
1327+
("pytest", "testing"),
1328+
("black", "all"),
1329+
("pytest", "all"),
1330+
]

0 commit comments

Comments
 (0)