Skip to content

Commit c84b0a5

Browse files
committed
Improve exception support in improve_packages_from_purldb task #303
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent 5bd72e6 commit c84b0a5

4 files changed

Lines changed: 33 additions & 4 deletions

File tree

component_catalog/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,9 +2435,12 @@ def get_tab_fields(self):
24352435
}
24362436
tab_fields.append(("", alert_context, None, "includes/field_alert.html"))
24372437

2438-
if len(purldb_entries) > 1:
2438+
len_purldb_entries = len(purldb_entries)
2439+
if len_purldb_entries > 1:
24392440
alert_context = {
2440-
"message": "There are multiple entries in the PurlDB for this Package.",
2441+
"message": (
2442+
f"There are {len_purldb_entries} entries in the PurlDB for this Package."
2443+
),
24412444
"full_width": True,
24422445
"alert_class": "alert-warning",
24432446
}

dejacode_toolkit/purldb.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def get_package(self, uuid):
5656

5757
def get_package_by_purl(self, package_url):
5858
"""Get a Package details entry providing its `package_url`."""
59-
if results := self.find_packages({"purl": package_url}):
59+
if results := self.find_packages(payload={"purl": package_url}):
6060
return results[0]
6161

6262
def find_packages(self, payload, timeout=None):

dje/tasks.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,16 @@ def improve_packages_from_purldb(product_uuid, user_uuid):
275275
created_by=user,
276276
)
277277

278+
updated_packages = []
278279
try:
279280
updated_packages = product.improve_packages_from_purldb(user)
280281
except Exception as e:
282+
logger.error(f"[improve_packages_from_purldb]: {e}.")
281283
scancode_project.update(
282284
status=ScanCodeProject.Status.FAILURE,
283-
import_log=str(e),
285+
import_log=["Error:", str(e)],
284286
)
287+
return
285288

286289
logger.info(f"[improve_packages_from_purldb]: {len(updated_packages)} updated from PurlDB.")
287290
verb = "Improved packages from PurlDB:"

product_portfolio/tests/test_views.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from django.contrib.contenttypes.models import ContentType
1616
from django.core.files.base import ContentFile
1717
from django.core.files.uploadedfile import SimpleUploadedFile
18+
from django.db import IntegrityError
1819
from django.shortcuts import resolve_url
1920
from django.test import TestCase
2021
from django.test.utils import override_settings
@@ -3384,6 +3385,7 @@ def test_product_portfolio_scancodeio_project_download_input_view(self):
33843385
response = self.client.get(download_url)
33853386
self.assertEqual(response.status_code, 404)
33863387

3388+
# HERE!
33873389
@mock.patch("product_portfolio.models.Product.improve_packages_from_purldb")
33883390
def test_product_portfolio_improve_packages_from_purldb_task(self, mock_improve):
33893391
mock_improve.return_value = ["pkg1", "pkg2"]
@@ -3431,6 +3433,27 @@ def test_product_portfolio_improve_packages_from_purldb_task(self, mock_improve)
34313433
self.assertEqual("dejacodeuser", notification.actor_content_type.model)
34323434
self.assertEqual(self.product1, notification.action_object)
34333435

3436+
@mock.patch("product_portfolio.models.Product.improve_packages_from_purldb")
3437+
def test_product_portfolio_improve_packages_from_purldb_task_exception(self, mock_improve):
3438+
mock_improve.side_effect = IntegrityError("duplicate key value violates unique constraint")
3439+
3440+
self.assertFalse(self.basic_user.has_perm("change_product", self.product1))
3441+
with self.assertLogs(tasks_logger) as cm:
3442+
results = improve_packages_from_purldb(self.product1.uuid, self.super_user.uuid)
3443+
self.assertIsNone(results)
3444+
3445+
import_project = self.product1.scancodeprojects.get()
3446+
self.assertEqual(import_project.type, ScanCodeProject.ProjectType.IMPROVE_FROM_PURLDB)
3447+
self.assertEqual(import_project.status, ScanCodeProject.Status.FAILURE)
3448+
expected = ["Error:", "duplicate key value violates unique constraint"]
3449+
self.assertEqual(expected, import_project.import_log)
3450+
3451+
expected = (
3452+
"ERROR:dje.tasks:[improve_packages_from_purldb]: "
3453+
"duplicate key value violates unique constraint."
3454+
)
3455+
self.assertIn(expected, cm.output)
3456+
34343457
def test_product_portfolio_vulnerability_analysis_form_view(self):
34353458
self.client.login(username=self.super_user.username, password="secret")
34363459

0 commit comments

Comments
 (0)