@@ -383,13 +383,20 @@ def save_all(self):
383383
384384class ImportFromScan :
385385 def __init__ (
386- self , product , user , upload_file , create_codebase_resources = True , stop_on_error = False
386+ self ,
387+ product ,
388+ user ,
389+ upload_file ,
390+ create_codebase_resources = True ,
391+ create_dependencies = False ,
392+ stop_on_error = False ,
387393 ):
388394 self .product = product
389395 self .dataspace = product .dataspace
390396 self .user = user
391397 self .upload_file = upload_file
392398 self .create_codebase_resources = create_codebase_resources
399+ self .create_dependencies = create_dependencies
393400 self .stop_on_error = stop_on_error
394401
395402 self .data = {}
@@ -465,6 +472,13 @@ def validate_toolkit_options(scan_options):
465472 options_str = " " .join (missing_options )
466473 raise ValidationError (f"The Scan run is missing those required options: { options_str } " )
467474
475+ def _handle_package_dependencies (self , package_data , package_uid , dependencies_by_package_uid ):
476+ if self .create_dependencies :
477+ if not package_data .get ("dependencies" ):
478+ package_data ["dependencies" ] = dependencies_by_package_uid .get (package_uid , [])
479+ else :
480+ package_data .pop ("dependencies" , None )
481+
468482 def import_packages (self ):
469483 product_packages_count = 0
470484 packages_count = 0
@@ -475,17 +489,18 @@ def import_packages(self):
475489 '"packages" is empty in the uploaded json file.'
476490 )
477491
478- dependencies = self .data .get ("dependencies" , [])
479492 dependencies_by_package_uid = defaultdict (list )
480- for dependency in dependencies :
481- for_package_uid = dependency .get ("for_package_uid" )
482- dependencies_by_package_uid [for_package_uid ].append (dependency )
493+ if self .create_dependencies :
494+ dependencies = self .data .get ("dependencies" , [])
495+ for dependency in dependencies :
496+ for_package_uid = dependency .get ("for_package_uid" )
497+ dependencies_by_package_uid [for_package_uid ].append (dependency )
483498
484499 for package_data in packages :
485500 package_uid = package_data .get ("package_uid" )
486- package_dependencies = package_data . get ( "dependencies" , [])
487- if not package_dependencies :
488- package_data [ "dependencies" ] = dependencies_by_package_uid . get ( package_uid , [] )
501+ self . _handle_package_dependencies (
502+ package_data , package_uid , dependencies_by_package_uid
503+ )
489504
490505 prepared = PackageImporter .prepare_package (package_data , path = "/" )
491506 if not prepared :
@@ -658,6 +673,7 @@ def __init__(
658673 update_existing = False ,
659674 scan_all_packages = False ,
660675 infer_download_urls = False ,
676+ create_dependencies = False ,
661677 ):
662678 self .licensing = Licensing ()
663679 self .created = defaultdict (list )
@@ -672,6 +688,7 @@ def __init__(
672688 self .update_existing = update_existing
673689 self .scan_all_packages = scan_all_packages
674690 self .infer_download_urls = infer_download_urls
691+ self .create_dependencies = create_dependencies
675692
676693 scancodeio = ScanCodeIO (user .dataspace )
677694 self .packages = scancodeio .fetch_project_packages (self .project_uuid )
@@ -681,7 +698,8 @@ def __init__(
681698
682699 def save (self ):
683700 self .import_packages ()
684- self .import_dependencies ()
701+ if self .create_dependencies :
702+ self .import_dependencies ()
685703
686704 if self .scan_all_packages :
687705 transaction .on_commit (lambda : self .product .scan_all_packages_task (self .user ))
0 commit comments