Skip to content

Commit 7350f59

Browse files
committed
Use content id to insert new advisory
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent c3cdb9b commit 7350f59

File tree

2 files changed

+37
-25
lines changed

2 files changed

+37
-25
lines changed

vulnerabilities/import_runner.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,24 +104,30 @@ def process_advisories(
104104
advisories = []
105105
for data in advisory_datas:
106106
content_id = compute_content_id(advisory_data=data)
107+
advisory = {
108+
"summary": data.summary,
109+
"affected_packages": [pkg.to_dict() for pkg in data.affected_packages],
110+
"references": [ref.to_dict() for ref in data.references],
111+
"date_published": data.date_published,
112+
"weaknesses": data.weaknesses,
113+
"created_by": importer_name,
114+
"date_collected": datetime.datetime.now(tz=datetime.timezone.utc),
115+
}
107116
try:
108117
aliases = get_or_create_aliases(aliases=data.aliases)
109118
obj, created = Advisory.objects.get_or_create(
110119
unique_content_id=content_id,
111120
url=data.url,
112-
defaults={
113-
"summary": data.summary,
114-
"affected_packages": [pkg.to_dict() for pkg in data.affected_packages],
115-
"references": [ref.to_dict() for ref in data.references],
116-
"date_published": data.date_published,
117-
"weaknesses": data.weaknesses,
118-
"created_by": importer_name,
119-
"date_collected": datetime.datetime.now(tz=datetime.timezone.utc),
120-
},
121+
defaults=advisory,
121122
)
122123
obj.aliases.add(*aliases)
123124
if not obj.date_imported:
124125
advisories.append(obj)
126+
except Advisory.MultipleObjectsReturned as mo:
127+
logger.error(
128+
f"Multiple Advisories returned: unique_content_id: {content_id}, url: {data.url}, advisory: {advisory!r}"
129+
)
130+
raise
125131
except Exception as e:
126132
logger.error(
127133
f"Error while processing {data!r} with aliases {data.aliases!r}: {e!r} \n {traceback_format_exc()}"

vulnerabilities/pipes/advisory.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,27 @@ def insert_advisory(advisory: AdvisoryData, pipeline_id: str, logger: Callable =
4343
aliases = get_or_create_aliases(aliases=advisory.aliases)
4444
content_id = compute_content_id(advisory_data=advisory)
4545
try:
46+
default_data = {
47+
"summary": advisory.summary,
48+
"affected_packages": [pkg.to_dict() for pkg in advisory.affected_packages],
49+
"references": [ref.to_dict() for ref in advisory.references],
50+
"date_published": advisory.date_published,
51+
"weaknesses": advisory.weaknesses,
52+
"created_by": pipeline_id,
53+
"date_collected": datetime.now(timezone.utc),
54+
}
55+
4656
advisory_obj, _ = Advisory.objects.get_or_create(
4757
unique_content_id=content_id,
4858
url=advisory.url,
49-
defaults={
50-
"summary": advisory.summary,
51-
"affected_packages": [pkg.to_dict() for pkg in advisory.affected_packages],
52-
"references": [ref.to_dict() for ref in advisory.references],
53-
"date_published": advisory.date_published,
54-
"weaknesses": advisory.weaknesses,
55-
"created_by": pipeline_id,
56-
"date_collected": datetime.now(timezone.utc),
57-
},
59+
defaults=default_data,
5860
)
5961
advisory_obj.aliases.add(*aliases)
62+
except Advisory.MultipleObjectsReturned:
63+
logger.error(
64+
f"Multiple Advisories returned: unique_content_id: {content_id}, url: {advisory.url}, advisory: {advisory!r}"
65+
)
66+
raise
6067
except Exception as e:
6168
if logger:
6269
logger(
@@ -137,19 +144,18 @@ def import_advisory(
137144
},
138145
)
139146
vulnerability.severities.add(vulnerability_severity)
147+
if not created and logger:
148+
logger(
149+
f"Severity updated for reference {ref.url!r} to value: {severity.value!r} "
150+
f"and scoring_elements: {severity.scoring_elements!r}",
151+
level=logging.DEBUG,
152+
)
140153
except:
141154
if logger:
142155
logger(
143156
f"Failed to create VulnerabilitySeverity for: {severity} with error:\n{traceback_format_exc()}",
144157
level=logging.ERROR,
145158
)
146-
if not created:
147-
if logger:
148-
logger(
149-
f"Severity updated for reference {ref.url!r} to value: {severity.value!r} "
150-
f"and scoring_elements: {severity.scoring_elements!r}",
151-
level=logging.DEBUG,
152-
)
153159

154160
for affected_purl in affected_purls or []:
155161
vulnerable_package, _ = Package.objects.get_or_create_from_purl(purl=affected_purl)

0 commit comments

Comments
 (0)