diff --git a/news/13372.bugfix.rst b/news/13372.bugfix.rst new file mode 100644 index 00000000000..11ddd6e2451 --- /dev/null +++ b/news/13372.bugfix.rst @@ -0,0 +1,2 @@ +- Names in dependency group includes are now normalized before lookup, which + fixes incorrect ``Dependency group '...' not found`` errors. diff --git a/news/dependency-groups.vendor.rst b/news/dependency-groups.vendor.rst new file mode 100644 index 00000000000..d1318b930d2 --- /dev/null +++ b/news/dependency-groups.vendor.rst @@ -0,0 +1 @@ +- Upgrade dependency-groups to 1.3.1 diff --git a/src/pip/_vendor/dependency_groups/_implementation.py b/src/pip/_vendor/dependency_groups/_implementation.py index 80d91693820..64e314a6328 100644 --- a/src/pip/_vendor/dependency_groups/_implementation.py +++ b/src/pip/_vendor/dependency_groups/_implementation.py @@ -12,7 +12,7 @@ def _normalize_name(name: str) -> str: def _normalize_group_names( - dependency_groups: Mapping[str, str | Mapping[str, str]] + dependency_groups: Mapping[str, str | Mapping[str, str]], ) -> Mapping[str, str | Mapping[str, str]]: original_names: dict[str, list[str]] = {} normalized_groups = {} @@ -171,17 +171,16 @@ def _resolve(self, group: str, requested_group: str) -> tuple[Requirement, ...]: if isinstance(item, Requirement): resolved_group.append(item) elif isinstance(item, DependencyGroupInclude): - if item.include_group in self._include_graph_ancestors.get(group, ()): + include_group = _normalize_name(item.include_group) + if include_group in self._include_graph_ancestors.get(group, ()): raise CyclicDependencyError( requested_group, group, item.include_group ) - self._include_graph_ancestors[item.include_group] = ( + self._include_graph_ancestors[include_group] = ( *self._include_graph_ancestors.get(group, ()), group, ) - resolved_group.extend( - self._resolve(item.include_group, requested_group) - ) + resolved_group.extend(self._resolve(include_group, requested_group)) else: # unreachable raise NotImplementedError( f"Invalid dependency group item after parse: {item}" @@ -206,8 +205,5 @@ def resolve( :raises LookupError: if group name is absent :raises packaging.requirements.InvalidRequirement: if a specifier is not valid """ - return tuple( - str(r) - for group in groups - for r in DependencyGroupResolver(dependency_groups).resolve(group) - ) + resolver = DependencyGroupResolver(dependency_groups) + return tuple(str(r) for group in groups for r in resolver.resolve(group)) diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt index 283d57f5f34..b6597dc0022 100644 --- a/src/pip/_vendor/vendor.txt +++ b/src/pip/_vendor/vendor.txt @@ -17,4 +17,4 @@ setuptools==70.3.0 tomli==2.2.1 tomli-w==1.2.0 truststore==0.10.1 -dependency-groups==1.3.0 +dependency-groups==1.3.1