Skip to content

Commit 3bc43ee

Browse files
authored
Update component_catalog/models.py
Remove code duplication and reduce database queries to a single one Signed-off-by: tdruez <[email protected]>
1 parent f781e22 commit 3bc43ee

File tree

1 file changed

+10
-24
lines changed

1 file changed

+10
-24
lines changed

component_catalog/models.py

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2506,30 +2506,16 @@ def create_from_url(cls, url, user):
25062506
if download_url and not purldb_data:
25072507
package_data = collect_package_data(download_url)
25082508

2509-
if sha512 := package_data.get("sha512"):
2510-
if sha512_match := scoped_packages_qs.filter(sha512=sha512):
2511-
package_link = sha512_match[0].get_absolute_link()
2512-
raise PackageAlreadyExistsWarning(
2513-
f"{url} already exists in your Dataspace as {package_link}"
2514-
)
2515-
2516-
if sha256 := package_data.get("sha256"):
2517-
if sha256_match := scoped_packages_qs.filter(sha256=sha256):
2518-
package_link = sha256_match[0].get_absolute_link()
2519-
raise PackageAlreadyExistsWarning(
2520-
f"{url} already exists in your Dataspace as {package_link}"
2521-
)
2522-
2523-
if sha1 := package_data.get("sha1"):
2524-
if sha1_match := scoped_packages_qs.filter(sha1=sha1):
2525-
package_link = sha1_match[0].get_absolute_link()
2526-
raise PackageAlreadyExistsWarning(
2527-
f"{url} already exists in your Dataspace as {package_link}"
2528-
)
2529-
2530-
if md5 := package_data.get("md5"):
2531-
if md5_match := scoped_packages_qs.filter(md5=md5):
2532-
package_link = md5_match[0].get_absolute_link()
2509+
# Check for existing package by hash fields with a single database query
2510+
hash_fields = ["sha512", "sha256", "sha1", "md5"]
2511+
hash_filters = models.Q()
2512+
for hash_field in hash_fields:
2513+
if hash_value := package_data.get(hash_field):
2514+
hash_filters |= models.Q(**{hash_field: hash_value})
2515+
2516+
if hash_filters:
2517+
if package_match := scoped_packages_qs.filter(hash_filters).first():
2518+
package_link = package_match.get_absolute_link()
25332519
raise PackageAlreadyExistsWarning(
25342520
f"{url} already exists in your Dataspace as {package_link}"
25352521
)

0 commit comments

Comments
 (0)