Skip to content

Commit 6706fa9

Browse files
committed
Extract combined functionality into get_dependencies & modify for get_dependencies_from_latest_tag
1 parent ae1a58d commit 6706fa9

File tree

3 files changed

+44
-11
lines changed

3 files changed

+44
-11
lines changed

exasol/toolbox/nox/_dependencies.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@
1212
licenses,
1313
packages_to_markdown,
1414
)
15-
from exasol.toolbox.util.dependencies.poetry_dependencies import (
16-
PoetryDependencies,
17-
PoetryToml,
18-
)
15+
from exasol.toolbox.util.dependencies.poetry_dependencies import get_dependencies
1916

2017

2118
class Audit:
@@ -86,12 +83,8 @@ def run(self, session: Session) -> None:
8683

8784
@nox.session(name="dependency:licenses", python=False)
8885
def dependency_licenses(session: Session) -> None:
89-
"""returns the packages and their licenses"""
90-
working_directory = Path()
91-
poetry_dep = PoetryToml.load_from_toml(working_directory=working_directory)
92-
dependencies = PoetryDependencies(
93-
groups=poetry_dep.groups, working_directory=working_directory
94-
).direct_dependencies
86+
"""Return the packages with their licenses"""
87+
dependencies = get_dependencies(working_directory=Path())
9588
package_infos = licenses()
9689
print(packages_to_markdown(dependencies=dependencies, packages=package_infos))
9790

exasol/toolbox/util/dependencies/poetry_dependencies.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import subprocess
4+
import tempfile
45
from pathlib import Path
56
from typing import Optional
67

@@ -12,6 +13,7 @@
1213
from tomlkit import TOMLDocument
1314

1415
from exasol.toolbox.util.dependencies.shared_models import Package
16+
from exasol.toolbox.util.git import Git
1517

1618

1719
class PoetryGroup(BaseModel):
@@ -21,6 +23,7 @@ class PoetryGroup(BaseModel):
2123
toml_section: Optional[str]
2224

2325

26+
PYPROJECT_TOML = "pyproject.toml"
2427
TRANSITIVE_GROUP = PoetryGroup(name="transitive", toml_section=None)
2528

2629

@@ -31,7 +34,7 @@ class PoetryToml(BaseModel):
3134

3235
@classmethod
3336
def load_from_toml(cls, working_directory: Path) -> PoetryToml:
34-
file_path = working_directory / "pyproject.toml"
37+
file_path = working_directory / PYPROJECT_TOML
3538
if not file_path.exists():
3639
raise ValueError(f"File not found: {file_path}")
3740

@@ -142,3 +145,21 @@ def all_dependencies(self) -> dict[str, list[Package]]:
142145
transitive_dependencies.append(dep)
143146

144147
return direct_dependencies | {TRANSITIVE_GROUP.name: transitive_dependencies}
148+
149+
150+
def get_dependencies(working_directory: Path) -> dict[str, list[Package]]:
151+
poetry_dep = PoetryToml.load_from_toml(working_directory=working_directory)
152+
return PoetryDependencies(
153+
groups=poetry_dep.groups, working_directory=working_directory
154+
).direct_dependencies
155+
156+
157+
def get_dependencies_from_latest_tag() -> dict[str, list[Package]]:
158+
latest_tag = Git.get_latest_tag()
159+
with tempfile.TemporaryDirectory() as path:
160+
tmpdir = Path(path)
161+
162+
Git.copy_remote_file_locally(latest_tag, "poetry.lock", tmpdir)
163+
Git.copy_remote_file_locally(latest_tag, PYPROJECT_TOML, tmpdir)
164+
165+
return get_dependencies(working_directory=tmpdir)

test/unit/util/dependencies/poetry_dependencies_test.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
PoetryDependencies,
77
PoetryGroup,
88
PoetryToml,
9+
get_dependencies,
10+
get_dependencies_from_latest_tag,
911
)
1012
from exasol.toolbox.util.dependencies.shared_models import Package
13+
from noxconfig import PROJECT_CONFIG
1114

1215
MAIN_GROUP = PoetryGroup(name="main", toml_section="project.dependencies")
1316
DEV_GROUP = PoetryGroup(name="dev", toml_section="tool.poetry.group.dev.dependencies")
@@ -128,3 +131,19 @@ def test_all_dependencies(create_poetry_project, project_path):
128131
transitive = result.pop("transitive")
129132
assert len(transitive) > 0
130133
assert result == DIRECT_DEPENDENCIES
134+
135+
136+
def test_get_dependencies():
137+
result = get_dependencies(PROJECT_CONFIG.root)
138+
139+
# if successful, no errors & should be non-empty dictionary
140+
assert isinstance(result, dict)
141+
assert result.keys()
142+
143+
144+
def test_get_dependencies_from_latest_tag():
145+
result = get_dependencies_from_latest_tag()
146+
147+
# if successful, no errors & should be non-empty dictionary
148+
assert isinstance(result, dict)
149+
assert result.keys()

0 commit comments

Comments
 (0)