|
| 1 | +Dependency Groups |
| 2 | +================= |
| 3 | + |
| 4 | +.. currentmodule:: packaging.dependency_groups |
| 5 | + |
| 6 | +Package data as defined in ``pyproject.toml`` may include lists of dependencies |
| 7 | +in named groups. This is described by the |
| 8 | +:ref:`dependency groups specification <pypug:dependency-groups>`, which defines |
| 9 | +the ``[dependency-groups]`` table. |
| 10 | + |
| 11 | +This module provides tools for resolving group names to lists of requirements, |
| 12 | +most notably expanding ``include-group`` directives. |
| 13 | + |
| 14 | +Usage |
| 15 | +----- |
| 16 | + |
| 17 | +Two primary interfaces are offered. An object-based one which caches results and |
| 18 | +provides ``Requirements`` as its results: |
| 19 | + |
| 20 | +.. doctest:: |
| 21 | + |
| 22 | + >>> from packaging.dependency_groups import DependencyGroupResolver |
| 23 | + >>> coverage = ["coverage"] |
| 24 | + >>> test = ["pytest", {"include-group": "coverage"}] |
| 25 | + >>> # A resolver is defined on a mapping of group names to group data, as |
| 26 | + >>> # you might get by loading the [dependency-groups] TOML table. |
| 27 | + >>> resolver = DependencyGroupResolver({"test": test, "coverage": coverage}) |
| 28 | + >>> # resolvers support expanding group names to Requirements |
| 29 | + >>> resolver.resolve("coverage") |
| 30 | + (<Requirement('coverage')>,) |
| 31 | + >>> resolver.resolve("test") |
| 32 | + (<Requirement('pytest')>, <Requirement('coverage')>) |
| 33 | + >>> # resolvers can also be used to lookup the dependency groups without |
| 34 | + >>> # expanding includes |
| 35 | + >>> resolver.lookup("test") |
| 36 | + (<Requirement('pytest')>, DependencyGroupInclude('coverage')) |
| 37 | + |
| 38 | +And a simpler functional interface which responds with strings: |
| 39 | + |
| 40 | +.. doctest:: |
| 41 | + |
| 42 | + >>> from packaging.dependency_groups import resolve_dependency_groups |
| 43 | + >>> coverage = ["coverage"] |
| 44 | + >>> test = ["pytest", {"include-group": "coverage"}] |
| 45 | + >>> groups = {"test": test, "coverage": coverage} |
| 46 | + >>> resolve_dependency_groups(groups, "test") |
| 47 | + ('pytest', 'coverage') |
| 48 | + |
| 49 | +Reference |
| 50 | +--------- |
| 51 | + |
| 52 | +Functional Interface |
| 53 | +'''''''''''''''''''' |
| 54 | + |
| 55 | +.. autofunction:: resolve_dependency_groups |
| 56 | + |
| 57 | + |
| 58 | +Object Model Interface |
| 59 | +'''''''''''''''''''''' |
| 60 | + |
| 61 | +.. autoclass:: DependencyGroupInclude |
| 62 | + :members: |
| 63 | + |
| 64 | +.. autoclass:: DependencyGroupResolver |
| 65 | + :members: |
| 66 | + |
| 67 | +Exceptions |
| 68 | +'''''''''' |
| 69 | + |
| 70 | +.. autoclass:: DuplicateGroupNames |
| 71 | + :members: |
| 72 | + |
| 73 | +.. autoclass:: CyclicDependencyGroup |
| 74 | + :members: |
| 75 | + |
| 76 | +.. autoclass:: InvalidDependencyGroupObject |
| 77 | + :members: |
0 commit comments