Skip to content

Commit c9b8bed

Browse files
committed
Create DiscoveredPackages before other models #447
Signed-off-by: Jono Yang <[email protected]>
1 parent d9d5a04 commit c9b8bed

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

scanpipe/pipes/scancode.py

+34-14
Original file line numberDiff line numberDiff line change
@@ -320,27 +320,28 @@ def scan_for_application_packages(project):
320320
resource_qs = project.codebaseresources.no_status()
321321

322322
# Collect detected Package data and save it to the CodebaseResource it was
323-
# detected from.
323+
# detected from
324324
_scan_and_save(
325325
resource_qs=resource_qs,
326326
scan_func=scan_for_package_data,
327327
save_func=save_scan_package_results,
328328
)
329329

330330
# Iterate through CodebaseResources with Package data and handle them using
331-
# the proper Package handler from packagedcode.
331+
# the proper Package handler from packagedcode
332332
assemble_packages(project=project)
333333

334334

335335
def add_to_package(package_uid, resource, project):
336336
"""
337-
Relate a DiscoveredPackage to `resource` from `project` using `package_uid`.
337+
Relate a DiscoveredPackage to `resource` from `project` using `package_uid`
338338
"""
339339
if not package_uid:
340340
return
341-
342-
resource_package = resource.discovered_packages.filter(package_uid=package_uid)
343-
if not resource_package.exists():
341+
package_associated_with_resource = resource.discovered_packages.filter(
342+
package_uid=package_uid
343+
).exists()
344+
if not package_associated_with_resource:
344345
package = project.discoveredpackages.get(package_uid=package_uid)
345346
resource.discovered_packages.add(package)
346347

@@ -350,20 +351,22 @@ def assemble_packages(project):
350351
Create instances of DiscoveredPackage and DiscoveredDependency for `project`
351352
from the parsed package data present in the CodebaseResources of `project`.
352353
"""
353-
logger.info(f"Project {project} assemble_packages:")
354+
logger.info(f"Project: {project}:\n" "Function: assemble_packages\n")
354355
seen_resource_paths = set()
355-
356356
for resource in project.codebaseresources.has_package_data():
357357
if resource.path in seen_resource_paths:
358358
continue
359359

360-
logger.info(f" Processing: {resource.path}")
360+
logger.info(f"Processing: CodebaseResource {resource.path}\n")
361+
361362
for package_mapping in resource.package_data:
362363
pd = packagedcode_models.PackageData.from_dict(mapping=package_mapping)
363-
logger.info(f" Package data: {pd.purl}")
364+
365+
logger.info(f"Processing: PackageData {pd.purl}\n")
364366

365367
handler = get_package_handler(pd)
366-
logger.info(f" Selected package handler: {handler.__name__}")
368+
369+
logger.info(f"Selected: Package handler {handler}\n")
367370

368371
items = handler.assemble(
369372
package_data=pd,
@@ -372,19 +375,36 @@ def assemble_packages(project):
372375
package_adder=add_to_package,
373376
)
374377

378+
dependencies = []
379+
resources = []
375380
for item in items:
376-
logger.info(f" Processing item: {item}")
381+
logger.info(f"Processing: item {item}\n")
377382
if isinstance(item, packagedcode_models.Package):
383+
# In order to relate CodebaseResources to
384+
# DiscoveredPackages, we create DiscoveredPackages from
385+
# yielded `Package`s first
378386
package_data = item.to_dict()
379387
pipes.update_or_create_package(project, package_data)
380388
elif isinstance(item, packagedcode_models.Dependency):
381389
# We will handle Dependencies when we properly implement the
382390
# DiscoveredDependency model
383391
pass
384392
elif isinstance(item, CodebaseResource):
385-
seen_resource_paths.add(item.path)
393+
# We store CodebaseResources in `resources` so we can
394+
# process them after we create all Packages assembled from
395+
# `resource`
396+
resources.append(item)
386397
else:
387-
logger.info(f"Unknown Package assembly item type: {item!r}")
398+
logger.info(f"Unknown Package assembly item type: {item!r}\n")
399+
400+
for item in resources + dependencies:
401+
logger.info(f"Processing: item {item}\n")
402+
if isinstance(item, packagedcode_models.Dependency):
403+
# We will handle Dependencies when we properly implement the
404+
# DiscoveredDependency model
405+
pass
406+
elif isinstance(item, CodebaseResource):
407+
seen_resource_paths.add(item.path)
388408

389409

390410
def run_scancode(location, output_file, options, raise_on_error=False):

0 commit comments

Comments
 (0)