Skip to content
Merged
Show file tree
Hide file tree
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
4 changes: 2 additions & 2 deletions src/fosslight_util/compare_yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@


def compare_yaml(before_file, after_file):
before_oss_items, _ = parsing_yml(before_file, os.path.dirname(before_file))
after_oss_items, _ = parsing_yml(after_file, os.path.dirname(after_file))
before_oss_items, _, _ = parsing_yml(before_file, os.path.dirname(before_file))
after_oss_items, _, _ = parsing_yml(after_file, os.path.dirname(after_file))

before_items = get_merged_item(before_oss_items)
after_items = get_merged_item(after_oss_items)
Expand Down
22 changes: 17 additions & 5 deletions src/fosslight_util/parsing_yaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ def parsing_yml(yaml_file, base_path, print_log=True):
oss_list = []
license_list = []
idx = 1
err_reason = ""
OLD_YAML_ROOT_ELEMENT = ['Open Source Software Package',
'Open Source Package']

Expand All @@ -32,6 +33,13 @@ def parsing_yml(yaml_file, base_path, print_log=True):
else:
relative_path = ""
doc = yaml.safe_load(codecs.open(yaml_file, "r", "utf-8"))
# If yaml file is empty, return immediately
if doc is None:
err_reason = "empty"
if print_log:
_logger.warning(f"The yaml file is empty file: {yaml_file}")
return oss_list, license_list, err_reason

is_old_format = any(x in doc for x in OLD_YAML_ROOT_ELEMENT)

for root_element in doc:
Expand All @@ -46,19 +54,21 @@ def parsing_yml(yaml_file, base_path, print_log=True):
for key, value in oss.items():
if key:
key = key.lower().strip()
set_value_switch(item, key, value)
set_value_switch(item, key, value, yaml_file)
oss_list.append(item)
license_list.extend(item.license)
idx += 1
except AttributeError as ex:
if print_log:
_logger.error(f"Not supported yaml file format {ex}")
_logger.warning(f"Not supported yaml file format: {yaml_file} {ex}")
oss_list = []
err_reason = "not_supported"
except yaml.YAMLError:
if print_log:
_logger.warning(f"Can't parse yaml - skip to parse yaml file: {yaml_file}")
_logger.warning(f"Error to parse yaml - skip to parse yaml file: {yaml_file}")
oss_list = []
return oss_list, set(license_list)
err_reason = "yaml_error"
return oss_list, set(license_list), err_reason


def find_sbom_yaml_files(path_to_find):
Expand All @@ -82,7 +92,7 @@ def find_sbom_yaml_files(path_to_find):
return oss_pkg_files


def set_value_switch(oss, key, value):
def set_value_switch(oss, key, value, yaml_file):
if key in ['oss name', 'name']:
oss.name = value
elif key in ['oss version', 'version']:
Expand All @@ -105,3 +115,5 @@ def set_value_switch(oss, key, value):
oss.yocto_package = value
elif key == 'yocto_recipe':
oss.yocto_recipe = value
else:
_logger.debug(f"file:{yaml_file} - key:{key} cannot be parsed")