A tool for resolving PEP 735 Dependency Group data
Project description
dependency-groups
An implementation of Dependency Groups (PEP 735).
This is a library which is able to parse dependency groups, following includes, and provide that data as output.
Usage
dependency_groups
expects data in the form of a dict, the loaded
[dependency-groups]
table. Start by loading:
import tomllib
with open("pyproject.toml", "rb") as fp:
pyproject = tomllib.load(fp)
groups = pyproject["dependency-groups"]
Using dependency_groups.resolve
, you can produce a list of strings, which
must be valid Dependency Specifiers.
from dependency_groups import resolve
groups = {
"test": ["pytest", {"include-group": "runtime"}],
"runtime": ["flask"],
}
resolve(groups, "test") # ['pytest', 'flask']
The library provides its resolution machinery via an object oriented interface,
which allows users to explore the structure of data before or during
resolution using DependencyGroupInclude
and DependencyGroupResolver
.
For example,
from dependency_groups import DependencyGroupResolver
groups = {
"test": ["pytest", {"include-group": "runtime"}],
"runtime": ["flask"],
}
resolver = DependencyGroupResolver(groups)
# you can lookup a group without resolving it
resolver.lookup("test") # [Requirement('pytest'), DependencyGroupInclude('runtime')]
# and resolve() produces packaging Requirements
resolver.resolve("test") # [Requirement('pytest'), Requirement('flask')]
Functional Interface
def resolve(
dependency_groups: Mapping[str, str | Mapping[str, str]], group: str, /
) -> tuple[str, ...]:
"""
Resolve a dependency group to a tuple of requirements, as strings.
:param dependency_groups: the parsed contents of the ``[dependency-groups]`` table
from ``pyproject.toml``
:param group: the name of the group to resolve
:raises TypeError: if the inputs appear to be the wrong types
:raises ValueError: if the data does not appear to be valid dependency group data
:raises LookupError: if group name is absent
:raises packaging.requirements.InvalidRequirement: if a specifier is not valid
"""
Models
Parsed Dependency Group Includes are represented by a dataclass:
@dataclasses.dataclass
class DependencyGroupInclude:
include_group: str
Resolver
class DependencyGroupResolver:
"""
A resolver for Dependency Group data.
This class handles caching, name normalization, cycle detection, and other
parsing requirements. There are only two public methods for exploring the data:
``lookup()`` and ``resolve()``.
:param dependency_groups: A mapping, as provided via pyproject
``[dependency-groups]``.
"""
def lookup(self, group: str) -> tuple[Requirement | DependencyGroupInclude, ...]:
"""
Lookup a group name, returning the parsed dependency data for that group.
This will not resolve includes.
:param group: the name of the group to lookup
:raises ValueError: if the data does not appear to be valid dependency group
data
:raises LookupError: if group name is absent
:raises packaging.requirements.InvalidRequirement: if a specifier is not valid
"""
def resolve(self, group: str) -> tuple[Requirement, ...]:
"""
Resolve a dependency group to a list of requirements.
:param group: the name of the group to resolve
:raises TypeError: if the inputs appear to be the wrong types
:raises ValueError: if the data does not appear to be valid dependency group
data
:raises LookupError: if group name is absent
:raises packaging.requirements.InvalidRequirement: if a specifier is not valid
"""
Errors
The following error classes are defined:
class CyclicDependencyError(ValueError):
"""
An error representing the detection of a cycle.
"""
CLI Usage
dependency-groups
provides a simple, module-level entrypoint.
It can parse a pyproject.toml file and print a dependency group's contents back
out.
Just use python -m dependency_groups --help
for details!
License
dependency-groups
is distributed under the terms of the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dependency_groups-0.2.0.tar.gz
.
File metadata
- Download URL: dependency_groups-0.2.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59da918178b931d9b0918dcd04ad579548425ca152f13edb6faef0d2df633fbd |
|
MD5 | 5c9d1b84c97e05028878f60eed0d5927 |
|
BLAKE2b-256 | 5731ac4aaac359336cc3fefcf7c3a1257bad77a8cfa3abf13fa6123eb71c3cf3 |
File details
Details for the file dependency_groups-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: dependency_groups-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a28932a5e993388d4f799913bf2fc8168e29f095fc39a04acbd8e86e1acd794e |
|
MD5 | 15cdbf992b3175ef14859da65f8cbbec |
|
BLAKE2b-256 | e4d558d14b7fe0a538f9f185aae6e457cfaae7fb6e713e0e84163775a5e26bd7 |