Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 31 additions & 14 deletions src/fosslight_util/write_scancodejson.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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):
Expand All @@ -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