Skip to content

Commit 244d753

Browse files
authored
fix(dependency_getter): avoid error on empty dependencies (#752)
* fix(dependency_getter): avoid error on empty dependencies * fix(dependency_getter): only check for `tool.poetry` to detect Poetry
1 parent 0820845 commit 244d753

6 files changed

Lines changed: 43 additions & 6 deletions

File tree

python/deptry/dependency_getter/builder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ def _project_contains_pyproject_toml(self) -> bool:
7171
@staticmethod
7272
def _project_uses_poetry(pyproject_toml: dict[str, Any]) -> bool:
7373
try:
74-
pyproject_toml["tool"]["poetry"]["dependencies"]
74+
pyproject_toml["tool"]["poetry"]
7575
logging.debug(
76-
"pyproject.toml contains a [tool.poetry.dependencies] section, so Poetry is used to specify the"
76+
"pyproject.toml contains a [tool.poetry] section, so Poetry is used to specify the"
7777
" project's dependencies."
7878
)
7979
except KeyError:
8080
logging.debug(
81-
"pyproject.toml does not contain a [tool.poetry.dependencies] section, so Poetry is not used to specify"
81+
"pyproject.toml does not contain a [tool.poetry] section, so Poetry is not used to specify"
8282
" the project's dependencies."
8383
)
8484
return False

python/deptry/dependency_getter/pep_621.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def get(self) -> DependenciesExtract:
5858

5959
def _get_dependencies(self) -> list[Dependency]:
6060
pyproject_data = load_pyproject_toml(self.config)
61-
dependency_strings: list[str] = pyproject_data["project"]["dependencies"]
61+
dependency_strings: list[str] = pyproject_data["project"].get("dependencies", [])
6262
return self._extract_pep_508_dependencies(dependency_strings, self.package_module_name_map)
6363

6464
def _get_optional_dependencies(self) -> dict[str, list[Dependency]]:

python/deptry/dependency_getter/poetry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def get(self) -> DependenciesExtract:
2121

2222
def _get_poetry_dependencies(self) -> list[Dependency]:
2323
pyproject_data = load_pyproject_toml(self.config)
24-
dependencies: dict[str, Any] = pyproject_data["tool"]["poetry"]["dependencies"]
24+
dependencies: dict[str, Any] = pyproject_data["tool"]["poetry"].get("dependencies", {})
2525
return self._get_dependencies(dependencies, self.package_module_name_map)
2626

2727
def _get_poetry_dev_dependencies(self) -> list[Dependency]:

tests/unit/dependency_getter/test_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def test_dependency_specification_not_found_raises_exception(tmp_path: Path, cap
123123
assert caplog.messages == [
124124
"pyproject.toml found!",
125125
(
126-
"pyproject.toml does not contain a [tool.poetry.dependencies] section, so Poetry is not used to specify the"
126+
"pyproject.toml does not contain a [tool.poetry] section, so Poetry is not used to specify the"
127127
" project's dependencies."
128128
),
129129
(

tests/unit/dependency_getter/test_pep_621.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,20 @@ def test_dependency_getter_with_incorrect_dev_group(tmp_path: Path, caplog: LogC
147147

148148
assert dependencies[2].name == "barfoo"
149149
assert "barfoo" in dependencies[2].top_levels
150+
151+
152+
def test_dependency_getter_empty_dependencies(tmp_path: Path) -> None:
153+
fake_pyproject_toml = """[project]
154+
# PEP 621 project metadata
155+
# See https://www.python.org/dev/peps/pep-0621/
156+
"""
157+
158+
with run_within_dir(tmp_path):
159+
with Path("pyproject.toml").open("w") as f:
160+
f.write(fake_pyproject_toml)
161+
162+
getter = PEP621DependencyGetter(config=Path("pyproject.toml"))
163+
dependencies_extract = getter.get()
164+
165+
assert len(dependencies_extract.dependencies) == 0
166+
assert len(dependencies_extract.dev_dependencies) == 0

tests/unit/dependency_getter/test_poetry.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
def test_dependency_getter(tmp_path: Path) -> None:
1010
fake_pyproject_toml = """
11+
[tool.poetry]
12+
name = "foo"
13+
1114
[tool.poetry.dependencies]
1215
python = ">=3.7,<4.0"
1316
bar = { version = ">=2.5.1,<4.0.0", python = ">3.7" }
@@ -68,3 +71,20 @@ def test_dependency_getter(tmp_path: Path) -> None:
6871

6972
assert dev_dependencies[5].name == "pytest-cov"
7073
assert "pytest_cov" in dev_dependencies[5].top_levels
74+
75+
76+
def test_dependency_getter_empty_dependencies(tmp_path: Path) -> None:
77+
fake_pyproject_toml = """
78+
[tool.poetry]
79+
name = "foo"
80+
"""
81+
82+
with run_within_dir(tmp_path):
83+
with Path("pyproject.toml").open("w") as f:
84+
f.write(fake_pyproject_toml)
85+
86+
getter = PoetryDependencyGetter(config=Path("pyproject.toml"))
87+
dependencies_extract = getter.get()
88+
89+
assert len(dependencies_extract.dependencies) == 0
90+
assert len(dependencies_extract.dev_dependencies) == 0

0 commit comments

Comments
 (0)