Skip to content
Snippets Groups Projects
Commit 076b9fb8 authored by Stefano Rivera's avatar Stefano Rivera
Browse files

New upstream version 1.3.1

parent 3920ab36
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,13 @@ CHANGELOG
Unreleased
----------
1.3.1
-----
- Fix a bug in which names in includes were not normalized before comparisons,
resulting in spurious ``LookupError``\s.
- Optimize the behavior of the ``resolve()`` function on multiple groups.
1.3.0
-----
......
Metadata-Version: 2.3
Metadata-Version: 2.4
Name: dependency-groups
Version: 1.3.0
Version: 1.3.1
Summary: A tool for resolving PEP 735 Dependency Group data
Keywords:
Author-email: Stephen Rosen <sirosen0@gmail.com>
Requires-Python: >=3.8
Description-Content-Type: text/x-rst
License-Expression: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
......@@ -16,12 +17,13 @@ Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
License-File: LICENSE.txt
Requires-Dist: packaging
Requires-Dist: tomli;python_version<'3.11'
Requires-Dist: tomli ; extra == "cli" and ( python_version<'3.11')
Project-URL: changelog, https://github.com/sirosen/dependency-groups/blob/main/CHANGELOG.rst
Project-URL: changelog, https://github.com/pypa/dependency-groups/blob/main/CHANGELOG.rst
Project-URL: documentation, https://dependency-groups.readthedocs.io/
Project-URL: source, https://github.com/sirosen/dependency-groups
Project-URL: source, https://github.com/pypa/dependency-groups
Provides-Extra: cli
Dependency Groups
......
[build-system]
requires = ["flit-core"]
requires = ["flit-core>=3.11"]
build-backend = "flit_core.buildapi"
[dependency-groups]
......@@ -13,11 +13,12 @@ dev = [{include-group = "test"}]
[project]
name = "dependency-groups"
version = "1.3.0"
version = "1.3.1"
description = 'A tool for resolving PEP 735 Dependency Group data'
readme = "README.rst"
requires-python = ">=3.8"
license = { text = "MIT" }
license = "MIT"
license-files = ["LICENSE.txt"]
keywords = []
authors = [
{ name = "Stephen Rosen", email = "sirosen0@gmail.com" },
......@@ -48,8 +49,8 @@ dependency-groups = "dependency_groups.__main__:main"
cli = ["tomli; python_version<'3.11'"]
[project.urls]
source = "https://github.com/sirosen/dependency-groups"
changelog = "https://github.com/sirosen/dependency-groups/blob/main/CHANGELOG.rst"
source = "https://github.com/pypa/dependency-groups"
changelog = "https://github.com/pypa/dependency-groups/blob/main/CHANGELOG.rst"
documentation = "https://dependency-groups.readthedocs.io/"
......
......@@ -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 @@ class DependencyGroupResolver:
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))
......@@ -127,3 +127,21 @@ def test_no_double_parse():
assert len(deceived_parse) == 1
assert isinstance(deceived_parse[0], DependencyGroupInclude)
assert deceived_parse[0].include_group == "perfidy"
@pytest.mark.parametrize("group_name_declared", ("foo-bar", "foo_bar", "foo..bar"))
@pytest.mark.parametrize("group_name_used", ("foo-bar", "foo_bar", "foo..bar"))
def test_normalized_name_is_used_for_include_group_lookups(
group_name_declared, group_name_used
):
groups = {
group_name_declared: ["spam"],
"eggs": [{"include-group": group_name_used}],
}
resolver = DependencyGroupResolver(groups)
result = resolver.resolve("eggs")
assert len(result) == 1
assert isinstance(result[0], Requirement)
req = result[0]
assert req.name == "spam"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment