1010import logging
1111import time
1212from collections import defaultdict
13+ from contextlib import contextmanager
1314from contextlib import suppress
1415
1516from 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