fosslight-util 1.4.47__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,9 +4,7 @@
4
4
  # SPDX-License-Identifier: Apache-2.0
5
5
 
6
6
  import logging
7
- import os
8
7
  from fosslight_util.constant import LOGGER_NAME
9
- from fosslight_util.parsing_yaml import parsing_yml
10
8
 
11
9
  logger = logging.getLogger(LOGGER_NAME)
12
10
  VERSION = 'version'
@@ -14,12 +12,16 @@ LICENSE = 'license'
14
12
  NAME = 'name'
15
13
 
16
14
 
17
- def compare_yaml(before_file, after_file):
18
- before_oss_items, _, _ = parsing_yml(before_file, os.path.dirname(before_file))
19
- after_oss_items, _, _ = parsing_yml(after_file, os.path.dirname(after_file))
15
+ def compare_yaml(before_fileitems, after_fileitems):
16
+ bf_raw = []
17
+ af_raw = []
18
+ for bf in before_fileitems:
19
+ bf_raw.extend(bf.get_print_json())
20
+ for af in after_fileitems:
21
+ af_raw.extend(af.get_print_json())
20
22
 
21
- before_items = get_merged_item(before_oss_items)
22
- after_items = get_merged_item(after_oss_items)
23
+ before_items = get_merged_item(bf_raw)
24
+ after_items = get_merged_item(af_raw)
23
25
 
24
26
  new_before = []
25
27
  for bi in before_items:
@@ -72,13 +74,18 @@ def compare_yaml(before_file, after_file):
72
74
  def get_merged_item(oss_items):
73
75
  item_list = []
74
76
  for oi in oss_items:
75
- if oi.exclude:
77
+ if oi.get("exclude", None):
76
78
  continue
77
- item_info = {NAME: oi.name, VERSION: oi.version, LICENSE: oi.license}
79
+ oi_name = oi.get("name", '')
80
+ oi_version = oi.get("version", '')
81
+ oi_license = oi.get("license", '')
82
+ if not (oi_name and oi_version and oi_license):
83
+ continue
84
+ item_info = {NAME: oi_name, VERSION: oi_version, LICENSE: oi_license}
78
85
 
79
- filtered = next(filter(lambda oss_dict: oss_dict[NAME] == oi.name and oss_dict[VERSION] == oi.version, item_list), None)
86
+ filtered = next(filter(lambda oss_dict: oss_dict[NAME] == oi_name and oss_dict[VERSION] == oi_version, item_list), None)
80
87
  if filtered:
81
- filtered[LICENSE].extend(oi.license)
88
+ filtered[LICENSE].extend(oi_license)
82
89
  filtered[LICENSE] = list(set(filtered[LICENSE]))
83
90
  else:
84
91
  item_list.append(item_info)
@@ -15,6 +15,17 @@ supported_sheet_and_scanner = {'SRC': FL_SOURCE,
15
15
  f'BIN_{FL_BINARY}': FL_BINARY,
16
16
  f'DEP_{FL_DEPENDENCY}': FL_DEPENDENCY}
17
17
 
18
+ FOSSLIGHT_SCANNER = 'fosslight_scanner'
19
+ FOSSLIGHT_SOURCE = 'fosslight_source'
20
+ FOSSLIGHT_DEPENDENCY = 'fosslight_dependency'
21
+ FOSSLIGHT_BINARY = 'fosslight_binary'
22
+
23
+ SHEET_NAME_FOR_SCANNER = {
24
+ FOSSLIGHT_SOURCE: 'SRC_FL_Source',
25
+ FOSSLIGHT_BINARY: 'BIN_FL_Binary',
26
+ FOSSLIGHT_DEPENDENCY: 'DEP_FL_Dependency'
27
+ }
28
+
18
29
  # Github : https://github.com/(owner)/(repo)
19
30
  # npm : https://www.npmjs.com/package/(package)/v/(version)
20
31
  # npm2 : https://www.npmjs.com/package/@(group)/(package)/v/(version)
@@ -33,7 +33,7 @@ def find_report_file(path_to_find):
33
33
  return ""
34
34
 
35
35
 
36
- def convert_excel_to_yaml(oss_report_to_read, output_file, sheet_names=""):
36
+ def convert_excel_to_yaml(oss_report_to_read: str, output_file: str, sheet_names: str = "") -> None:
37
37
  _file_extension = ".yaml"
38
38
  yaml_dict = {}
39
39
 
fosslight_util/correct.py CHANGED
@@ -7,19 +7,16 @@ import logging
7
7
  import os
8
8
  import copy
9
9
  import re
10
- from fosslight_util.constant import LOGGER_NAME
10
+ from fosslight_util.constant import LOGGER_NAME, FOSSLIGHT_SOURCE
11
11
  from fosslight_util.parsing_yaml import parsing_yml
12
- import fosslight_util.constant as constant
13
- from fosslight_util.oss_item import OssItem
14
12
 
15
13
  logger = logging.getLogger(LOGGER_NAME)
16
14
  SBOM_INFO_YAML = r"sbom(-|_)info[\s\S]*.ya?ml"
17
15
 
18
16
 
19
- def correct_with_yaml(correct_filepath, path_to_scan, scanner_oss_list):
17
+ def correct_with_yaml(correct_filepath, path_to_scan, scan_item):
20
18
  success = True
21
19
  msg = ""
22
- correct_list = {}
23
20
  correct_yaml = ""
24
21
  if correct_filepath == "":
25
22
  correct_filepath = path_to_scan
@@ -33,101 +30,60 @@ def correct_with_yaml(correct_filepath, path_to_scan, scanner_oss_list):
33
30
  if not correct_yaml:
34
31
  msg = f"Cannot find sbom-info.yaml in {correct_filepath}."
35
32
  success = False
36
- return success, msg, correct_list
33
+ return success, msg, scan_item
37
34
 
38
35
  rel_path = os.path.relpath(path_to_scan, correct_filepath)
39
36
 
40
- yaml_oss_list, _, err_msg = parsing_yml(correct_yaml, os.path.dirname(correct_yaml), print_log=True)
41
-
37
+ yaml_file_list, _, err_msg = parsing_yml(correct_yaml, os.path.dirname(correct_yaml), print_log=True)
42
38
  find_match = False
43
- matched_yaml = []
44
- for yitem in yaml_oss_list:
45
- matched_yaml.append([0]*len(yitem.source_name_or_path))
46
-
47
- for sheet_name, sheet_contents in scanner_oss_list.items():
48
- if sheet_name not in constant.supported_sheet_and_scanner.keys():
49
- continue
50
- correct_contents = copy.deepcopy(sheet_contents)
51
- scanner_name = constant.supported_sheet_and_scanner[sheet_name]
52
- matched_source_path_with_sbom = []
53
- for idx, oss_raw_item in enumerate(sheet_contents):
54
- if len(oss_raw_item) < 9:
55
- logger.warning(f"sheet list is too short ({len(oss_raw_item)}): {oss_raw_item}")
39
+ for scanner_name, _ in scan_item.file_items.items():
40
+ correct_fileitems = []
41
+ exclude_fileitems = []
42
+ for yaml_file_item in yaml_file_list:
43
+ yaml_path_exists = False
44
+ if yaml_file_item.source_name_or_path == '':
45
+ if scanner_name == FOSSLIGHT_SOURCE:
46
+ correct_item = copy.deepcopy(yaml_file_item)
47
+ correct_item.comment = 'Added by sbom-info.yaml'
48
+ correct_fileitems.append(correct_item)
56
49
  continue
57
- oss_item = OssItem('')
58
- oss_item.set_sheet_item(oss_raw_item, scanner_name)
50
+ for idx, scan_file_item in enumerate(scan_item.file_items[scanner_name]):
51
+ oss_rel_path = os.path.normpath(os.path.join(rel_path, scan_file_item.source_name_or_path))
52
+ yi_path = yaml_file_item.source_name_or_path
53
+ if ((os.path.normpath(yi_path) == os.path.normpath(oss_rel_path)) or
54
+ ((os.path.normpath(oss_rel_path).startswith(os.path.normpath(yi_path.rstrip('*')))))):
55
+ correct_item = copy.deepcopy(scan_file_item)
56
+ correct_item.exclude = yaml_file_item.exclude
57
+ correct_item.oss_items = copy.deepcopy(yaml_file_item.oss_items)
58
+ correct_item.comment = ''
59
+ correct_item.comment = 'Loaded from sbom-info.yaml'
60
+ correct_fileitems.append(correct_item)
59
61
 
60
- matched_yi = []
61
- if not oss_item.source_name_or_path[0] in matched_source_path_with_sbom:
62
- oss_rel_path = os.path.normpath(os.path.join(rel_path, oss_item.source_name_or_path[0]))
63
- for y_idx, yi in enumerate(yaml_oss_list):
64
- if not yi.source_name_or_path:
65
- continue
66
- for ys_idx, yi_path in enumerate(yi.source_name_or_path):
67
- yi_item = copy.deepcopy(yi)
68
- if ((os.path.normpath(yi_path) == os.path.normpath(oss_rel_path)) or
69
- ((os.path.normpath(oss_rel_path).startswith(os.path.normpath(yi_path.rstrip('*')))))):
70
- find_match = True
71
- yi_item.source_name_or_path = []
72
- yi_item.source_name_or_path = oss_item.source_name_or_path[0]
73
- matched_source_path_with_sbom.append(oss_item.source_name_or_path[0])
74
- matched_yi.append(yi_item)
75
- matched_yaml[y_idx][ys_idx] = 1
76
- if len(matched_yi) > 0:
77
- for matched_yi_item in matched_yi:
78
- matched_oss_item = copy.deepcopy(matched_yi_item)
79
- if matched_oss_item.comment:
80
- matched_oss_item.comment += '/'
81
- matched_oss_item.comment += 'Loaded from sbom-info.yaml'
82
- if sheet_name == 'BIN_FL_Binary':
83
- matched_oss_item.bin_vulnerability = oss_item.bin_vulnerability
84
- matched_oss_item.bin_tlsh = oss_item.bin_tlsh
85
- matched_oss_item.bin_sha1 = oss_item.bin_sha1
86
- matched_oss_array = matched_oss_item.get_print_array(scanner_name)[0]
87
- correct_contents.append(matched_oss_array)
88
- oss_item.exclude = True
89
- if oss_item.comment:
90
- oss_item.comment += '/'
91
- oss_item.comment += 'Excluded by sbom-info.yaml'
92
- correct_contents[idx] = oss_item.get_print_array(scanner_name)[0]
93
- else:
94
- oss_item.exclude = True
95
- if oss_item.comment:
96
- oss_item.comment += '/'
97
- oss_item.comment += 'Excluded by sbom-info.yaml'
98
- correct_contents[idx] = oss_item.get_print_array(scanner_name)[0]
62
+ yaml_path_exists = True
63
+ exclude_fileitems.append(idx)
99
64
 
100
- if sheet_name == 'SRC_FL_Source':
101
- for n_idx, ni in enumerate(matched_yaml):
102
- y_item = copy.deepcopy(yaml_oss_list[n_idx])
103
- all_matched = False
104
- if sum(ni) != 0:
105
- not_matched_path = []
106
- for idx, id in enumerate(ni):
107
- if not id:
108
- not_matched_path.append(y_item.source_name_or_path[idx])
109
- y_item.source_name_or_path = []
110
- y_item.source_name_or_path = not_matched_path
111
- if len(not_matched_path) == 0:
112
- all_matched = True
113
- if y_item.comment:
114
- y_item.comment += '/'
115
- y_item.comment += 'Added by sbom-info.yaml'
116
- if not (y_item.source_name_or_path or all_matched):
117
- correct_contents.append(y_item.get_print_array()[0])
118
- continue
119
- for y_path in y_item.source_name_or_path:
120
- y_item_i = copy.deepcopy(y_item)
121
- if not os.path.exists(os.path.normpath(os.path.join(correct_filepath, y_path))):
122
- y_item_i.exclude = True
123
- y_item_i.source_name_or_path = []
124
- y_item_i.source_name_or_path = y_path
125
- correct_contents.append(y_item_i.get_print_array()[0])
126
- correct_list[sheet_name] = correct_contents
65
+ if not yaml_path_exists:
66
+ correct_item = copy.deepcopy(yaml_file_item)
67
+ if os.path.exists(os.path.normpath(yaml_file_item.source_name_or_path)):
68
+ correct_item.comment = 'Loaded from sbom-info.yaml'
69
+ correct_fileitems.append(correct_item)
70
+ else:
71
+ if scanner_name == FOSSLIGHT_SOURCE:
72
+ correct_item.exclude = True
73
+ correct_item.comment = 'Added by sbom-info.yaml'
74
+ correct_fileitems.append(correct_item)
75
+ if correct_fileitems:
76
+ scan_item.append_file_items(correct_fileitems, scanner_name)
77
+ find_match = True
78
+ if exclude_fileitems:
79
+ exclude_fileitems = list(set(exclude_fileitems))
80
+ for e_idx in exclude_fileitems:
81
+ scan_item.file_items[scanner_name][e_idx].exclude = True
82
+ scan_item.file_items[scanner_name][e_idx].comment = 'Excluded by sbom-info.yaml'
127
83
 
128
84
  if not find_match:
129
85
  success = False
130
86
  err_msg = 'No match items in sbom-info.yaml'
131
- return success, err_msg, yaml_oss_list
87
+ return success, err_msg, scan_item
132
88
 
133
- return success, msg, correct_list
89
+ return success, msg, scan_item
fosslight_util/cover.py CHANGED
@@ -9,16 +9,31 @@ from fosslight_util.help import print_package_version
9
9
 
10
10
 
11
11
  class CoverItem:
12
- tool_name_key = "Tool name"
13
- tool_version_key = "Tool version"
12
+ tool_name_key = "Tool information"
14
13
  start_time_key = "Start time"
15
14
  python_ver_key = "Python version"
16
15
  analyzed_path_key = "Analyzed path"
17
16
  excluded_path_key = "Excluded path"
18
17
  comment_key = "Comment"
19
18
 
20
- def __init__(self, tool_name="", start_time="", input_path="", comment="", exclude_path=[]):
21
- self.tool_name = tool_name
19
+ PKG_NAMES = [
20
+ "fosslight_scanner",
21
+ "fosslight_source",
22
+ "fosslight_dependency",
23
+ "fosslight_binary"
24
+ ]
25
+
26
+ def __init__(self, tool_name="", start_time="", input_path="", comment="", exclude_path=[], simple_mode=True):
27
+ if simple_mode:
28
+ self.tool_name = f'{tool_name} v{print_package_version(tool_name, "", False)}'
29
+ else:
30
+ first_pkg = f'{self.PKG_NAMES[0]} v{print_package_version(self.PKG_NAMES[0], "", False)}'
31
+ remaining_pkgs = ", ".join([
32
+ f'{pkg_name} v{print_package_version(pkg_name, "", False)}'
33
+ for pkg_name in self.PKG_NAMES[1:]
34
+ ])
35
+ self.tool_name = f'{first_pkg} ({remaining_pkgs})'
36
+
22
37
  if start_time:
23
38
  date, time = start_time.split('_')
24
39
  self.start_time = f'{date}, {time[0:2]}:{time[2:4]}'
@@ -28,7 +43,6 @@ class CoverItem:
28
43
  self.exclude_path = ", ".join(exclude_path)
29
44
  self.comment = comment
30
45
 
31
- self.tool_version = print_package_version(self.tool_name, "", False)
32
46
  self.python_version = f'{sys.version_info.major}.{sys.version_info.minor}'
33
47
 
34
48
  def __del__(self):
@@ -37,7 +51,6 @@ class CoverItem:
37
51
  def get_print_json(self):
38
52
  json_item = {}
39
53
  json_item[self.tool_name_key] = self.tool_name
40
- json_item[self.tool_version_key] = self.tool_version
41
54
  json_item[self.start_time_key] = self.start_time
42
55
  json_item[self.python_ver_key] = self.python_version
43
56
  json_item[self.analyzed_path_key] = self.input_path
fosslight_util/help.py CHANGED
@@ -35,12 +35,11 @@ _HELP_MESSAGE_DOWNLOAD = """
35
35
 
36
36
 
37
37
  class PrintHelpMsg():
38
- message_suffix = ""
39
38
 
40
- def __init__(self, value):
39
+ def __init__(self, value: str = ""):
41
40
  self.message_suffix = value
42
41
 
43
- def print_help_msg(self, exitopt):
42
+ def print_help_msg(self, exitopt: bool) -> None:
44
43
  print(_HELP_MESSAGE_COMMON)
45
44
  print(self.message_suffix)
46
45
 
@@ -48,7 +47,7 @@ class PrintHelpMsg():
48
47
  sys.exit()
49
48
 
50
49
 
51
- def print_package_version(pkg_name, msg="", exitopt=True):
50
+ def print_package_version(pkg_name: str, msg: str = "", exitopt: bool = True) -> str:
52
51
  if msg == "":
53
52
  msg = f"{pkg_name} Version:"
54
53
  cur_version = pkg_resources.get_distribution(pkg_name).version