Skip to content

Commit f48d426

Browse files
committed
refine save
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 80095db commit f48d426

1 file changed

Lines changed: 19 additions & 12 deletions

File tree

product_portfolio/importers.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import logging
1111
import time
1212
from collections import defaultdict
13+
from contextlib import contextmanager
1314
from contextlib import suppress
1415

1516
from django import forms
@@ -687,32 +688,30 @@ def __init__(
687688
self.package_uid_mapping = {}
688689

689690
self.user = user
691+
self.dataspace = product.dataspace
690692
self.project_uuid = project_uuid
691693
self.product = product
692694
self.update_existing = update_existing
693695
self.scan_all_packages = scan_all_packages
694696
self.infer_download_urls = infer_download_urls
695697
self.create_dependencies = create_dependencies
696698

697-
# Pre-fetch once to avoid repeated DB lookups in DefaultOnAdditionMixin.save().
698-
dataspace = product.dataspace
699-
self.default_review_status = ProductRelationStatus.objects.get_default_on_addition_qs(
700-
dataspace
701-
).first()
702-
self.default_purpose = ProductItemPurpose.objects.get_default_on_addition_qs(
703-
dataspace
704-
).first()
699+
def save(self):
700+
save_start = time.perf_counter()
701+
702+
scancodeio = ScanCodeIO(self.dataspace)
705703

706-
scancodeio = ScanCodeIO(user.dataspace)
704+
step_start = time.perf_counter()
707705
self.packages = scancodeio.fetch_project_packages(self.project_uuid)
706+
logger.info(f"fetch_project_packages: {time.perf_counter() - step_start:.1f}s")
707+
708708
if not self.packages:
709709
raise Exception("Packages could not be fetched from ScanCode.io")
710710

711711
if self.create_dependencies:
712+
step_start = time.perf_counter()
712713
self.dependencies = scancodeio.fetch_project_dependencies(self.project_uuid)
713-
714-
def save(self):
715-
save_start = time.perf_counter()
714+
logger.info(f"fetch_project_dependencies: {time.perf_counter() - step_start:.1f}s")
716715

717716
step_start = time.perf_counter()
718717
self.import_packages()
@@ -737,6 +736,14 @@ def save(self):
737736
return dict(self.created), dict(self.existing), dict(self.errors)
738737

739738
def import_packages(self):
739+
# Pre-fetch once to avoid repeated DB lookups in DefaultOnAdditionMixin.save().
740+
self.default_review_status = ProductRelationStatus.objects.get_default_on_addition_qs(
741+
self.dataspace
742+
).first()
743+
self.default_purpose = ProductItemPurpose.objects.get_default_on_addition_qs(
744+
self.dataspace
745+
).first()
746+
740747
for package_data in self.packages:
741748
self.import_package(package_data)
742749

0 commit comments

Comments
 (0)