Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 2 additions & 2 deletions src/poetry/core/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -804,9 +804,9 @@ def _validate_dependency_groups(
normalized_group_name = canonicalize_name(group_name)
original_names[normalized_group_name].add(group_name)
if include_groups := group_config.get("include-groups", []):
group_includes[normalized_group_name] = [
group_includes.setdefault(normalized_group_name, []).extend(
canonicalize_name(name) for name in include_groups
]
)

for normed_name, names in original_names.items():
if len(names) > 1:
Expand Down
49 changes: 49 additions & 0 deletions tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -2057,3 +2057,52 @@ def test_create_poetry_with_optional_dependency_group(
assert len(poetry.package.all_requires) == 1
assert poetry.package.has_dependency_group("dev")
assert poetry.package.dependency_group("dev").is_optional() is optional


def test_pep735_includes_not_overwritten_by_poetry_includes(
temporary_directory: Path,
) -> None:
"""PEP 735 include-group entries must not be lost when [tool.poetry.group]
also defines include-groups for the same group.

Setup:
[dependency-groups] dev includes testing (PEP 735)
[tool.poetry.group.dev] includes utils (poetry)
[dependency-groups] testing includes dev (PEP 735)
The poetry-side include (dev -> utils) must not erase the PEP 735 one.
"""
content = """\
[project]
name = "my-package"
version = "1.2.3"

[dependency-groups]
dev = [
{include-group = "testing"},
"black",
]
testing = [
{include-group = "dev"},
"pytest",
]
utils = [
"mypy",
]

[tool.poetry.group.dev]
include-groups = [
"utils",
]
"""

expected = """\
The Poetry configuration is invalid:
- Cyclic dependency group include in dev: testing -> dev
- Cyclic dependency group include in testing: dev -> testing
"""
assert_invalid_group_including(
toml_data=content,
expected_error=expected,
error_type=RuntimeError,
temporary_directory=temporary_directory,
)