Skip to content

Commit c92ce57

Browse files
committed
fix get_or_create_from_data
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 3e98f57 commit c92ce57

4 files changed

Lines changed: 14 additions & 7 deletions

File tree

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ shell:
2727
# Open a bash session in a standalone container (no stack required)
2828
docker run -it $(IMAGE_NAME) bash
2929

30+
# make test - full suite
31+
# make test k=<pattern> - filter by name, e.g. make test k=test_name
3032
test:
31-
@echo "-> Run the test suite"
32-
${MANAGE} test --noinput --parallel auto
33+
${MANAGE} test --noinput --parallel auto $(if $(k),-k $(k),)
3334

3435
migrations:
3536
@echo "-> Creates new database migrations"

vulnerabilities/models.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,14 @@ def get_or_create_from_data(cls, dataspace, data, validate=False):
232232
"""Get or create a Vulnerability from provided ``data``."""
233233
vulnerability_qs = Vulnerability.objects.scope(dataspace)
234234

235-
# Support for CycloneDX data structure
236235
data = data.copy()
237-
advisory_uid = data.get("advisory_uid") or data.pop("id", None)
236+
# CycloneDX uses "id" where we expect advisory_id and advisory_uid.
237+
if "id" in data:
238+
cyclonedx_id = data.pop("id")
239+
data.setdefault("advisory_id", cyclonedx_id)
240+
data.setdefault("advisory_uid", cyclonedx_id)
241+
242+
advisory_uid = data.get("advisory_uid")
238243
if not advisory_uid:
239244
return
240245

vulnerabilities/tests/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def make_vulnerability(dataspace, affecting=None, **data):
1717
data["advisory_id"] = f"ID-0000-{make_string(4)}"
1818

1919
if "advisory_uid" not in data:
20-
data["advisory_uid"] = f'importer/{data["advisory_id"]}'
20+
data["advisory_uid"] = f"importer/{data['advisory_id']}"
2121

2222
vulnerability = Vulnerability.objects.create(
2323
dataspace=dataspace,

vulnerabilities/tests/test_models.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,18 +249,19 @@ def test_vulnerability_model_create_from_data(self):
249249

250250
def test_vulnerability_model_get_or_create_from_data(self):
251251
vulnerability_data = {
252-
"id": "VCID-q4q6-yfng-aaag",
252+
"id": "ID-q4q6-yfng-aaag",
253253
"summary": "In Django 3.2 before 3.2.25, 4.2 before 4.2.11, and 5.0.",
254254
}
255255

256256
vulnerability1 = Vulnerability.get_or_create_from_data(
257257
dataspace=self.dataspace,
258258
data=vulnerability_data,
259259
)
260+
self.assertEqual(vulnerability_data["id"], vulnerability1.advisory_uid)
260261
self.assertEqual(vulnerability_data["id"], vulnerability1.advisory_id)
261262
self.assertEqual(vulnerability_data["summary"], vulnerability1.summary)
262263

263-
vulnerability_data["advisory_uid"] = vulnerability_data["id"]
264+
vulnerability_data["advisory_uid"] = vulnerability1.advisory_uid
264265
vulnerability2 = Vulnerability.get_or_create_from_data(
265266
dataspace=self.dataspace,
266267
data=vulnerability_data,

0 commit comments

Comments
 (0)