52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from dataclasses import dataclass
|
|
from typing import TYPE_CHECKING
|
|
|
|
from deptry.dependency_getter.pep621.base import PEP621DependencyGetter
|
|
from deptry.utils import load_pyproject_toml
|
|
|
|
if TYPE_CHECKING:
|
|
from deptry.dependency import Dependency
|
|
|
|
|
|
@dataclass
|
|
class PDMDependencyGetter(PEP621DependencyGetter):
|
|
"""
|
|
Class to get dependencies that are specified according to PEP 621 from a `pyproject.toml` file for a project that
|
|
uses PDM for its dependency management.
|
|
"""
|
|
|
|
def _get_dev_dependencies(
|
|
self,
|
|
dependency_groups_dependencies: dict[str, list[Dependency]],
|
|
dev_dependencies_from_optional: list[Dependency],
|
|
) -> list[Dependency]:
|
|
"""
|
|
Retrieve dev dependencies from pyproject.toml, which in PDM are specified as:
|
|
|
|
[tool.pdm.dev-dependencies]
|
|
test = [
|
|
"pytest",
|
|
"pytest-cov",
|
|
]
|
|
tox = [
|
|
"tox",
|
|
"tox-pdm>=0.5",
|
|
]
|
|
"""
|
|
dev_dependencies = super()._get_dev_dependencies(dependency_groups_dependencies, dev_dependencies_from_optional)
|
|
|
|
pyproject_data = load_pyproject_toml(self.config)
|
|
|
|
dev_dependency_strings: list[str] = []
|
|
try:
|
|
dev_dependencies_dict: dict[str, str] = pyproject_data["tool"]["pdm"]["dev-dependencies"]
|
|
for deps in dev_dependencies_dict.values():
|
|
dev_dependency_strings += deps
|
|
except KeyError:
|
|
logging.debug("No section [tool.pdm.dev-dependencies] found in pyproject.toml")
|
|
|
|
return [*dev_dependencies, *self._extract_pep_508_dependencies(dev_dependency_strings)]
|