Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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: 3 additions & 1 deletion src/dependency_groups/_implementation.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,11 +154,13 @@ def _parse_group(
# valid PEP 508 Dependency Specifier
# raises InvalidRequirement on failure
elements.append(Requirement(item))
elif isinstance(item, dict):
elif isinstance(item, Mapping):
if tuple(item.keys()) != ("include-group",):
raise ValueError(f"Invalid dependency group item: {item}")

include_group = next(iter(item.values()))
if not isinstance(include_group, str):
raise ValueError(f"Invalid dependency group item: {item}")
Comment thread
henryiii marked this conversation as resolved.
Outdated
elements.append(DependencyGroupInclude(include_group=include_group))
else:
raise ValueError(f"Invalid dependency group item: {item}")
Expand Down
19 changes: 19 additions & 0 deletions tests/test_resolve_func.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,25 @@ def test_unknown_object_shape(item):
resolve(groups, "test")


def test_non_str_include_group_value():
groups = {"test": [{"include-group": 5}]}
with pytest.raises(ValueError, match="Invalid dependency group item:"):
resolve(groups, "test")


def test_mapping_include_group_item():
import types

groups = {
"test": [
"pytest",
types.MappingProxyType({"include-group": "runtime"}),
],
"runtime": ["sqlalchemy"],
}
assert set(resolve(groups, "test")) == {"pytest", "sqlalchemy"}


def test_resolve_all_empty():
groups = {}
assert resolve_all(groups) == {}
Expand Down
Loading