Skip to content

Commit c8a58c8

Browse files
committed
Change structure of vulnerability so clearer delineation between package information and vulnerability
1 parent 0a3c9ae commit c8a58c8

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

exasol/toolbox/util/dependencies/audit.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
Any,
1313
)
1414

15-
from pydantic import BaseModel
15+
from pydantic import (
16+
BaseModel,
17+
ConfigDict,
18+
)
1619

1720
from exasol.toolbox.util.dependencies.shared_models import (
1821
Package,
@@ -62,7 +65,10 @@ def get_link(self, package: str, vuln_id: str) -> str:
6265
return map_link[self].format(package=package, vuln_id=vuln_id)
6366

6467

65-
class Vulnerability(Package):
68+
class Vulnerability(BaseModel):
69+
model_config = ConfigDict(frozen=True, arbitrary_types_allowed=True)
70+
71+
package: Package
6672
id: str
6773
aliases: list[str]
6874
fix_versions: list[str]
@@ -76,8 +82,7 @@ def from_audit_entry(
7682
Create a Vulnerability from a pip-audit vulnerability entry
7783
"""
7884
return cls(
79-
name=package_name,
80-
version=version,
85+
package=Package(name=package_name, version=version),
8186
id=vuln_entry["id"],
8287
aliases=vuln_entry["aliases"],
8388
fix_versions=vuln_entry["fix_versions"],
@@ -91,19 +96,19 @@ def references(self) -> list[str]:
9196
@property
9297
def reference_links(self) -> tuple[str, ...]:
9398
return tuple(
94-
source.get_link(package=self.name, vuln_id=reference)
99+
source.get_link(package=self.package.name, vuln_id=reference)
95100
for reference in self.references
96101
if (source := VulnerabilitySource.from_prefix(reference.upper()))
97102
)
98103

99104
@property
100105
def security_issue_entry(self) -> dict[str, str | list[str]]:
101106
return {
102-
"name": self.name,
103-
"version": str(self.version),
107+
"name": self.package.name,
108+
"version": str(self.package.version),
104109
"refs": self.references,
105110
"description": self.description,
106-
"coordinates": self.coordinates,
111+
"coordinates": self.package.coordinates,
107112
"references": self.reference_links,
108113
}
109114

@@ -129,7 +134,7 @@ def subsection_for_changelog_summary(self) -> str:
129134
"""
130135
links_join = "\n* ".join(sorted(self.reference_links))
131136
references_subsection = f"\n#### References:\n\n* {links_join}\n\n "
132-
subsection = f"### {self.vulnerability_id} in {self.coordinates}\n\n{self.description}\n{references_subsection}"
137+
subsection = f"### {self.vulnerability_id} in {self.package.coordinates}\n\n{self.description}\n{references_subsection}"
133138
return cleandoc(subsection.strip())
134139

135140

exasol/toolbox/util/dependencies/track_vulnerabilities.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def _is_resolved(self, previous_vuln: Vulnerability):
2424
"""
2525
previous_vuln_set = {previous_vuln.id, *previous_vuln.aliases}
2626
for current_vuln in self.current_vulnerabilities:
27-
if previous_vuln.name == current_vuln.name:
27+
if previous_vuln.package.name == current_vuln.package.name:
2828
current_vuln_id_set = {current_vuln.id, *current_vuln.aliases}
2929
if previous_vuln_set.intersection(current_vuln_id_set):
3030
return False

test/unit/util/dependencies/audit_test.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ class TestVulnerability:
3333
def test_from_audit_entry(sample_vulnerability):
3434
result = sample_vulnerability.vulnerability
3535
assert result == Vulnerability(
36-
name=sample_vulnerability.package_name,
37-
version=sample_vulnerability.version,
36+
package=sample_vulnerability.vulnerability.package,
3837
id=sample_vulnerability.vulnerability_id,
3938
aliases=[sample_vulnerability.cve_id],
4039
fix_versions=[sample_vulnerability.fix_version],
@@ -76,8 +75,7 @@ def test_security_issue_entry(sample_vulnerability):
7675
)
7776
def test_reference_links(sample_vulnerability, reference: str, expected: list[str]):
7877
result = Vulnerability(
79-
name=sample_vulnerability.package_name,
80-
version=sample_vulnerability.version,
78+
package=sample_vulnerability.vulnerability.package,
8179
id=reference,
8280
aliases=[],
8381
fix_versions=[sample_vulnerability.fix_version],
@@ -98,8 +96,7 @@ def test_reference_links(sample_vulnerability, reference: str, expected: list[st
9896
def test_vulnerability_id(self, sample_vulnerability, aliases: list[str], expected):
9997

10098
result = Vulnerability(
101-
name=sample_vulnerability.package_name,
102-
version=sample_vulnerability.version,
99+
package=sample_vulnerability.vulnerability.package,
103100
id="DUMMY_IDENTIFIER",
104101
aliases=aliases,
105102
fix_versions=[sample_vulnerability.fix_version],

0 commit comments

Comments
 (0)