(root: Path, groups: set[str])
| 68 | |
| 69 | |
| 70 | def resolve(root: Path, groups: set[str]) -> set[Requirement]: |
| 71 | pyproject_file = root / "pyproject.toml" |
| 72 | if not pyproject_file.exists(): # check if it's static PEP-621 metadata |
| 73 | return set() |
| 74 | with pyproject_file.open("rb") as file_handler: |
| 75 | pyproject = tomllib.load(file_handler) |
| 76 | dependency_groups_raw = pyproject["dependency-groups"] |
| 77 | if not isinstance(dependency_groups_raw, dict): |
| 78 | msg = f"dependency-groups is {type(dependency_groups_raw).__name__} instead of table" |
| 79 | raise Fail(msg) |
| 80 | original_names_lookup, dependency_groups = _normalize_group_names(dependency_groups_raw) |
| 81 | result: set[Requirement] = set() |
| 82 | for group in groups: |
| 83 | result = result.union(_resolve_dependency_group(dependency_groups, group, original_names_lookup)) |
| 84 | |
| 85 | project_name = pyproject.get("project", {}).get("name") |
| 86 | optional_dependencies = pyproject.get("project", {}).get("optional-dependencies", {}) |
| 87 | |
| 88 | return unwrap_nested_extras(optional_dependencies, project_name, result, set()) |
| 89 | |
| 90 | |
| 91 | def _normalize_group_names( |
nothing calls this directly
no test coverage detected
searching dependent graphs…