From a2396c4620baf890c71f8a42a086d8fa1cd06661 Mon Sep 17 00:00:00 2001 From: "jiyeong.seok" Date: Fri, 2 May 2025 14:48:54 +0900 Subject: [PATCH] Add dep info in ui result Signed-off-by: jiyeong.seok --- src/fosslight_util/write_scancodejson.py | 45 ++++++++++++++++-------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/fosslight_util/write_scancodejson.py b/src/fosslight_util/write_scancodejson.py index 7b87018..6100468 100644 --- a/src/fosslight_util/write_scancodejson.py +++ b/src/fosslight_util/write_scancodejson.py @@ -6,7 +6,7 @@ import logging import os import json -from fosslight_util.constant import LOGGER_NAME +from fosslight_util.constant import LOGGER_NAME, FOSSLIGHT_DEPENDENCY from fosslight_util.oss_item import ScannerItem from typing import List @@ -20,22 +20,27 @@ def write_scancodejson(output_dir: str, output_filename: str, oss_list: List[Sca json_output['summary'] = {} json_output['license_detections'] = [] json_output['files'] = [] + json_output['dependencies'] = [] - for file_items in oss_list.file_items.values(): + for scanner, file_items in oss_list.file_items.items(): for fi in file_items: - if fi.exclude: - continue - if fi.oss_items and (all(oss_item.exclude for oss_item in fi.oss_items)): - continue - if not fi.source_name_or_path: - fi.source_name_or_path = EMPTY_FILE_PATH - json_output['files'] = add_item_in_files(fi, json_output['files']) + if scanner == FOSSLIGHT_DEPENDENCY: + json_output['dependencies'] = add_item_in_deps(fi, json_output['dependencies']) + else: + if fi.exclude: + continue + if fi.oss_items and (all(oss_item.exclude for oss_item in fi.oss_items)): + continue + if not fi.source_name_or_path: + fi.source_name_or_path = EMPTY_FILE_PATH + json_output['files'] = add_item_in_files(fi, json_output['files']) with open(os.path.join(output_dir, output_filename), 'w') as f: json.dump(json_output, f, sort_keys=False, indent=4) -def append_oss_item_in_filesitem(oss_items, files_item): +def get_oss_item_list(oss_items): + scan_oss_items = [] for oi in oss_items: if oi.exclude: continue @@ -46,9 +51,9 @@ def append_oss_item_in_filesitem(oss_items, files_item): oss_item['copyright'] = oi.copyright oss_item['download_location'] = oi.download_location oss_item['comment'] = oi.comment - files_item['oss'].append(oss_item) + scan_oss_items.append(oss_item) - return files_item + return scan_oss_items def add_item_in_files(file_item, files_list): @@ -57,8 +62,20 @@ def add_item_in_files(file_item, files_list): files_item['name'] = os.path.basename(file_item.source_name_or_path) files_item['is_binary'] = file_item.is_binary files_item['base_name'], files_item['extension'] = os.path.splitext(os.path.basename(file_item.source_name_or_path)) - files_item['oss'] = [] - files_item = append_oss_item_in_filesitem(file_item.oss_items, files_item) + files_item['oss'] = get_oss_item_list(file_item.oss_items) + files_list.append(files_item) return files_list + + +def add_item_in_deps(file_item, deps_list): + deps_item = {} + deps_item['purl'] = file_item.purl + deps_item['scope'] = 'dependencies' + deps_item['depends_on'] = file_item.depends_on + deps_item['oss'] = get_oss_item_list(file_item.oss_items) + + deps_list.append(deps_item) + + return deps_list