Skip to content

Commit 93ab123

Browse files
committed
Cleanup purldb_entries if the PURL differs #303
Signed-off-by: tdruez <[email protected]>
1 parent fdb9962 commit 93ab123

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

component_catalog/models.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2455,6 +2455,7 @@ def get_purldb_entries(self, user, max_request_call=0, timeout=10):
24552455
is nothing was found.
24562456
"""
24572457
payloads = []
2458+
purldb_entries = []
24582459

24592460
package_url = self.package_url
24602461
if package_url:
@@ -2469,8 +2470,15 @@ def get_purldb_entries(self, user, max_request_call=0, timeout=10):
24692470
if max_request_call and index >= max_request_call:
24702471
return
24712472

2472-
if packages_data := purldb.find_packages(payload, timeout):
2473-
return packages_data
2473+
if purldb_entries := purldb.find_packages(payload, timeout):
2474+
break
2475+
2476+
# Cleanup the PurlDB entries:
2477+
# - Packages with different PURL are excluded.
2478+
if package_url:
2479+
purldb_entries = [entry for entry in purldb_entries if entry.get("purl") == package_url]
2480+
2481+
return purldb_entries
24742482

24752483
def update_from_purldb(self, user):
24762484
"""

component_catalog/tests/test_models.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2556,6 +2556,27 @@ def test_package_model_inferred_url_property(self):
25562556
expected = "https://github.com/package-url/packageurl-python/tree/v0.10.4"
25572557
self.assertEqual(expected, package1.inferred_url)
25582558

2559+
@mock.patch("dejacode_toolkit.purldb.PurlDB.find_packages")
2560+
def test_package_model_get_purldb_entries(self, mock_find_packages):
2561+
purl = "pkg:pypi/[email protected]"
2562+
package1 = make_package(self.dataspace, package_url=purl)
2563+
purldb_entry1 = {
2564+
"purl": purl,
2565+
"type": "pypi",
2566+
"name": "django",
2567+
"version": "3.0",
2568+
}
2569+
purldb_entry2 = {
2570+
"purl": "pkg:pypi/django",
2571+
"type": "pypi",
2572+
"name": "django",
2573+
}
2574+
2575+
mock_find_packages.return_value = [purldb_entry1, purldb_entry2]
2576+
purldb_entries = package1.get_purldb_entries(user=self.user)
2577+
# The purldb_entry2 is excluded as the PURL differs
2578+
self.assertEqual([purldb_entry1], purldb_entries)
2579+
25592580
@mock.patch("component_catalog.models.Package.get_purldb_entries")
25602581
def test_package_model_update_from_purldb(self, mock_get_purldb_entries):
25612582
purldb_entry = {

0 commit comments

Comments
 (0)