Skip to content

Commit 61bb81b

Browse files
committed
Move PoetryFiles and create poetry_files_from_latest_tag in shared_models. Add get_vulnerabilities_from_latest_tag
1 parent ef66679 commit 61bb81b

File tree

5 files changed

+46
-26
lines changed

5 files changed

+46
-26
lines changed

exasol/toolbox/nox/_lint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from nox import Session
1212

1313
from exasol.toolbox.nox._shared import python_files
14-
from exasol.toolbox.util.dependencies.poetry_dependencies import PoetryFiles
14+
from exasol.toolbox.util.dependencies.shared_models import PoetryFiles
1515
from noxconfig import PROJECT_CONFIG
1616

1717

exasol/toolbox/nox/_release.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
check_for_config_attribute,
1515
)
1616
from exasol.toolbox.nox.plugin import NoxTasks
17-
from exasol.toolbox.util.dependencies.poetry_dependencies import PoetryFiles
17+
from exasol.toolbox.util.dependencies.shared_models import PoetryFiles
1818
from exasol.toolbox.util.git import Git
1919
from exasol.toolbox.util.release.changelog import Changelogs
2020
from exasol.toolbox.util.version import (

exasol/toolbox/util/dependencies/audit.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
from re import search
99
from typing import (
1010
Any,
11-
Union,
1211
)
1312

1413
from pydantic import BaseModel
1514

16-
from exasol.toolbox.util.dependencies.shared_models import Package
15+
from exasol.toolbox.util.dependencies.shared_models import (
16+
Package,
17+
poetry_files_from_latest_tag,
18+
)
1719

1820
PIP_AUDIT_VULNERABILITY_PATTERN = (
1921
r"^Found \d+ known vulnerabilit\w{1,3} in \d+ package\w?$"
@@ -145,3 +147,8 @@ def security_issue_dict(self) -> list[dict[str, str | list[str]]]:
145147
return [
146148
vulnerability.security_issue_entry for vulnerability in self.vulnerabilities
147149
]
150+
151+
152+
def get_vulnerabilities_from_latest_tag():
153+
with poetry_files_from_latest_tag() as tmp_dir:
154+
return Vulnerabilities.load_from_pip_audit(working_directory=tmp_dir)

exasol/toolbox/util/dependencies/poetry_dependencies.py

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
from __future__ import annotations
22

33
import subprocess
4-
import tempfile
54
from collections import OrderedDict
6-
from dataclasses import dataclass
75
from pathlib import Path
8-
from typing import Final
96

107
import tomlkit
118
from pydantic import (
@@ -17,9 +14,9 @@
1714
from exasol.toolbox.util.dependencies.shared_models import (
1815
NormalizedPackageStr,
1916
Package,
17+
PoetryFiles,
18+
poetry_files_from_latest_tag,
2019
)
21-
from exasol.toolbox.util.git import Git
22-
from noxconfig import PROJECT_CONFIG
2320

2421

2522
class PoetryGroup(BaseModel):
@@ -29,16 +26,6 @@ class PoetryGroup(BaseModel):
2926
toml_section: str | None
3027

3128

32-
@dataclass(frozen=True)
33-
class PoetryFiles:
34-
pyproject_toml: Final[str] = "pyproject.toml"
35-
poetry_lock: Final[str] = "poetry.lock"
36-
37-
@property
38-
def files(self) -> tuple[str, ...]:
39-
return tuple(self.__dict__.values())
40-
41-
4229
TRANSITIVE_GROUP = PoetryGroup(name="transitive", toml_section=None)
4330

4431

@@ -175,10 +162,5 @@ def get_dependencies(
175162
def get_dependencies_from_latest_tag() -> (
176163
OrderedDict[str, dict[NormalizedPackageStr, Package]]
177164
):
178-
latest_tag = Git.get_latest_tag()
179-
path = PROJECT_CONFIG.root.relative_to(Git.toplevel())
180-
with tempfile.TemporaryDirectory() as tmpdir_str:
181-
tmpdir = Path(tmpdir_str)
182-
for file in PoetryFiles().files:
183-
Git.checkout(latest_tag, path / file, tmpdir / file)
184-
return get_dependencies(working_directory=tmpdir)
165+
with poetry_files_from_latest_tag() as tmp_dir:
166+
return get_dependencies(working_directory=tmp_dir)

exasol/toolbox/util/dependencies/shared_models.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
from __future__ import annotations
22

3+
import tempfile
4+
from collections.abc import Generator
5+
from contextlib import contextmanager
6+
from dataclasses import dataclass
7+
from pathlib import Path
38
from typing import (
49
Annotated,
10+
Final,
511
NewType,
612
)
713

@@ -12,6 +18,9 @@
1218
ConfigDict,
1319
)
1420

21+
from exasol.toolbox.util.git import Git
22+
from noxconfig import PROJECT_CONFIG
23+
1524
NormalizedPackageStr = NewType("NormalizedPackageStr", str)
1625

1726
VERSION_TYPE = Annotated[str, AfterValidator(lambda v: Version(v))]
@@ -30,3 +39,25 @@ class Package(BaseModel):
3039
@property
3140
def normalized_name(self) -> NormalizedPackageStr:
3241
return normalize_package_name(self.name)
42+
43+
44+
@dataclass(frozen=True)
45+
class PoetryFiles:
46+
pyproject_toml: Final[str] = "pyproject.toml"
47+
poetry_lock: Final[str] = "poetry.lock"
48+
49+
@property
50+
def files(self) -> tuple[str, ...]:
51+
return tuple(self.__dict__.values())
52+
53+
54+
@contextmanager
55+
def poetry_files_from_latest_tag() -> Generator[Path]:
56+
"""Context manager to set up a temporary directory with poetry files from the latest tag"""
57+
latest_tag = Git.get_latest_tag()
58+
path = PROJECT_CONFIG.root.relative_to(Git.toplevel())
59+
with tempfile.TemporaryDirectory() as tmpdir_str:
60+
tmp_dir = Path(tmpdir_str)
61+
for file in PoetryFiles().files:
62+
Git.checkout(latest_tag, path / file, tmp_dir / file)
63+
yield tmp_dir

0 commit comments

Comments
 (0)