fosslight-util 1.4.48__py3-none-any.whl → 2.0.1__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.
@@ -8,23 +8,30 @@ import uuid
8
8
  import logging
9
9
  import re
10
10
  from pathlib import Path
11
- from spdx.creationinfo import Tool
12
- from spdx.document import Document
13
- from spdx.package import Package
14
- from spdx.relationship import Relationship
15
- from spdx.license import License, LicenseConjunction
16
- from spdx.utils import SPDXNone
17
- from spdx.utils import NoAssert
18
- from spdx.version import Version
19
- from spdx.writers import json
20
- from spdx.writers import yaml
21
- from spdx.writers import xml
22
- from spdx.writers import tagvalue
11
+ from spdx_tools.common.spdx_licensing import spdx_licensing
12
+ from spdx_tools.spdx.model import (
13
+ Actor,
14
+ ActorType,
15
+ Checksum,
16
+ ChecksumAlgorithm,
17
+ CreationInfo,
18
+ Document,
19
+ File,
20
+ Package,
21
+ Relationship,
22
+ RelationshipType,
23
+ SpdxNoAssertion,
24
+ SpdxNone
25
+ )
26
+ from spdx_tools.spdx.validation.document_validator import validate_full_spdx_document
27
+ from spdx_tools.spdx.writer.write_anything import write_file
28
+ from datetime import datetime
23
29
  from fosslight_util.spdx_licenses import get_spdx_licenses_json, get_license_from_nick
24
- import fosslight_util.constant as constant
30
+ from fosslight_util.constant import (LOGGER_NAME, FOSSLIGHT_DEPENDENCY, FOSSLIGHT_SCANNER,
31
+ FOSSLIGHT_BINARY, FOSSLIGHT_SOURCE)
25
32
  import traceback
26
33
 
27
- logger = logging.getLogger(constant.LOGGER_NAME)
34
+ logger = logging.getLogger(LOGGER_NAME)
28
35
 
29
36
 
30
37
  def get_license_list_version():
@@ -37,20 +44,29 @@ def get_license_list_version():
37
44
  return version
38
45
 
39
46
 
40
- def write_spdx(output_file_without_ext, output_extension, sheet_list,
41
- scanner_name, scanner_version, spdx_version=(2, 3)):
47
+ def write_spdx(output_file_without_ext, output_extension, scan_item, spdx_version='2.3'):
42
48
  success = True
43
49
  error_msg = ''
44
- if sheet_list:
45
- doc = Document(version=Version(*spdx_version),
46
- data_license=License.from_identifier('CC0-1.0'),
47
- namespace=f'http://spdx.org/spdxdocs/{scanner_name.lower()}-{uuid.uuid4()}',
48
- name=f'SPDX Document by {scanner_name.upper()}',
49
- spdx_id='SPDXRef-DOCUMENT')
50
50
 
51
- doc.creation_info.set_created_now()
52
- doc.creation_info.add_creator(Tool(f'{scanner_name.upper()} {scanner_version}'))
53
- doc.creation_info.license_list_version = Version(*tuple(get_license_list_version().split('.')))
51
+ if scan_item:
52
+ try:
53
+ cover_name = scan_item.cover.get_print_json()["Tool information"].split('(').pop(0).strip()
54
+ match = re.search(r"(.+) v([0-9.]+)", cover_name)
55
+ if match:
56
+ scanner_name = match.group(1)
57
+ else:
58
+ scanner_name = FOSSLIGHT_SCANNER
59
+ except Exception:
60
+ cover_name = FOSSLIGHT_SCANNER
61
+ scanner_name = FOSSLIGHT_SCANNER
62
+ creation_info = CreationInfo(spdx_version=f'SPDX-{spdx_version}',
63
+ spdx_id='SPDXRef-DOCUMENT',
64
+ name=f'SPDX Document by {scanner_name.upper()}',
65
+ data_license='CC0-1.0',
66
+ document_namespace=f'http://spdx.org/spdxdocs/{scanner_name.lower()}-{uuid.uuid4()}',
67
+ creators=[Actor(name=cover_name, actor_type=ActorType.TOOL)],
68
+ created=datetime.now())
69
+ doc = Document(creation_info=creation_info)
54
70
 
55
71
  relation_tree = {}
56
72
  spdx_id_packages = []
@@ -58,72 +74,94 @@ def write_spdx(output_file_without_ext, output_extension, sheet_list,
58
74
  output_dir = os.path.dirname(output_file_without_ext)
59
75
  Path(output_dir).mkdir(parents=True, exist_ok=True)
60
76
  try:
77
+ file_id = 0
61
78
  package_id = 0
62
79
  root_package = False
63
- for sheet_name, sheet_contents in sheet_list.items():
64
- if sheet_name not in constant.supported_sheet_and_scanner.keys():
65
- continue
66
- scanner = constant.supported_sheet_and_scanner.get(sheet_name)
67
- for oss_item in sheet_contents:
68
- if len(oss_item) < 9:
69
- logger.warning(f"sheet list is too short ({len(oss_item)}): {oss_item}")
70
- continue
71
- package_id += 1
72
- package = Package(spdx_id=f'SPDXRef-{package_id}')
73
-
74
- if oss_item[1] != '':
75
- package.name = oss_item[1] # required
76
- else:
77
- package.name = SPDXNone()
78
-
79
- if oss_item[2] != '':
80
- package.version = oss_item[2] # no required
81
-
82
- if oss_item[4] != '':
83
- package.download_location = oss_item[4] # required
84
- else:
85
- package.download_location = SPDXNone()
86
-
87
- if scanner == constant.FL_DEPENDENCY:
88
- package.files_analyzed = False # If omitted, the default value of true is assumed.
89
- else:
90
- package.files_analyzed = True
91
-
92
- if oss_item[5] != '':
93
- package.homepage = oss_item[5] # no required
94
-
95
- if oss_item[6] != '':
96
- package.cr_text = oss_item[3] # required
97
- else:
98
- package.cr_text = SPDXNone()
99
- if oss_item[3] != '':
100
- lic_list = [check_input_license_format(lic.strip()) for lic in oss_item[3].split(',')]
101
- first_lic = License.from_identifier(lic_list.pop(0))
102
- while lic_list:
103
- next_lic = License.from_identifier(lic_list.pop(0))
104
- license_conjunction = LicenseConjunction(first_lic, next_lic)
105
- first_lic = license_conjunction
106
- package.license_declared = first_lic
107
- else:
108
- package.license_declared = NoAssert() # required
109
-
110
- doc.add_package(package)
111
-
112
- if scanner == constant.FL_DEPENDENCY:
113
- spdx_id_packages.append([package.name, package.spdx_id])
114
- comment = oss_item[8]
115
- relation_tree[package.name] = {}
116
- relation_tree[package.name]['id'] = package.spdx_id
117
- relation_tree[package.name]['dep'] = []
118
-
119
- if 'root package' in comment.split(','):
120
- root_package = True
121
- relationship = Relationship(f"{doc.spdx_id} DESCRIBES {package.spdx_id}")
122
- doc.add_relationship(relationship)
123
- if len(oss_item) > 9:
124
- deps = oss_item[9]
125
- relation_tree[package.name]['dep'].extend([di.strip().split('(')[0] for di in deps.split(',')])
126
- if scanner == constant.FL_DEPENDENCY and len(relation_tree) > 0:
80
+ for scanner_name, file_items in scan_item.file_items.items():
81
+ for file_item in file_items:
82
+ file = '' # file의 license, copyright은 oss item에서 append
83
+ if scanner_name in [FOSSLIGHT_BINARY, FOSSLIGHT_SOURCE]:
84
+ file_id += 1
85
+ file = File(name=file_item.source_name_or_path,
86
+ spdx_id=f'SPDXRef-File{file_id}',
87
+ checksums=[Checksum(ChecksumAlgorithm.SHA1, file_item.checksum)])
88
+ file_license = []
89
+ file_copyright = []
90
+ for oss_item in file_item.oss_items:
91
+ oss_licenses = []
92
+ declared_oss_licenses = []
93
+ lic_comment = []
94
+ for oi in oss_item.license:
95
+ oi = check_input_license_format(oi)
96
+ try:
97
+ oi_spdx = spdx_licensing.parse(oi, validate=True)
98
+ oss_licenses.append(oi_spdx)
99
+ declared_oss_licenses.append(oi)
100
+ except Exception:
101
+ logger.debug(f'No spdx license name: {oi}')
102
+ lic_comment.append(oi)
103
+ if oss_licenses:
104
+ file_license.extend(oss_licenses)
105
+ if oss_item.copyright != '':
106
+ file_copyright.append(oss_item.copyright)
107
+
108
+ if oss_item.download_location == '':
109
+ if scanner_name == FOSSLIGHT_DEPENDENCY:
110
+ download_location = SpdxNone()
111
+ else:
112
+ continue
113
+ else:
114
+ download_location = oss_item.download_location
115
+ if scanner_name != FOSSLIGHT_DEPENDENCY and oss_item.name == '':
116
+ continue
117
+ package_id += 1
118
+ package = Package(name=oss_item.name,
119
+ spdx_id=f'SPDXRef-Package{package_id}',
120
+ download_location=download_location)
121
+
122
+ if oss_item.version != '':
123
+ package.version = oss_item.version
124
+
125
+ if scanner_name == FOSSLIGHT_DEPENDENCY:
126
+ package.files_analyzed = False # If omitted, the default value of true is assumed.
127
+ else:
128
+ package.files_analyzed = True
129
+ if oss_item.copyright != '':
130
+ package.cr_text = oss_item.copyright
131
+ if oss_item.homepage != '':
132
+ package.homepage = oss_item.homepage
133
+
134
+ if declared_oss_licenses:
135
+ package.license_declared = spdx_licensing.parse(' AND '.join(declared_oss_licenses))
136
+ if lic_comment:
137
+ package.license_comment = ' '.join(lic_comment)
138
+
139
+ doc.packages.append(package)
140
+
141
+ if scanner_name == FOSSLIGHT_DEPENDENCY:
142
+ purl = file_item.purl
143
+ spdx_id_packages.append([purl, package.spdx_id])
144
+ relation_tree[purl] = {}
145
+ relation_tree[purl]['id'] = package.spdx_id
146
+ relation_tree[purl]['dep'] = []
147
+ if 'root package' in oss_item.comment:
148
+ root_package = True
149
+ relationship = Relationship(doc.creation_info.spdx_id,
150
+ RelationshipType.DESCRIBES,
151
+ package.spdx_id)
152
+ doc.relationships.append(relationship)
153
+ relation_tree[purl]['dep'].extend(file_item.depends_on)
154
+
155
+ if scanner_name in [FOSSLIGHT_BINARY, FOSSLIGHT_SOURCE]:
156
+ if file_license:
157
+ file.license_info_in_file = file_license
158
+ if file_copyright:
159
+ file.copyright_text = '\n'.join(file_copyright)
160
+ if lic_comment:
161
+ file.license_comment = ' '.join(lic_comment)
162
+ doc.files.append(file)
163
+
164
+ if len(doc.packages) > 0:
127
165
  for pkg in relation_tree:
128
166
  if len(relation_tree[pkg]['dep']) > 0:
129
167
  pkg_spdx_id = relation_tree[pkg]['id']
@@ -133,18 +171,18 @@ def write_spdx(output_file_without_ext, output_extension, sheet_list,
133
171
  if ans is None:
134
172
  continue
135
173
  rel_pkg_spdx_id = ans[1]
136
- relationship = Relationship(f'{pkg_spdx_id} DEPENDS_ON {rel_pkg_spdx_id}')
137
- doc.add_relationship(relationship)
138
- if not root_package:
139
- root_package = Package(spdx_id='SPDXRef-ROOT-PACKAGE')
140
- root_package.name = 'root package'
141
- root_package.download_location = NoAssert()
142
- root_package.files_analyzed = False
143
- root_package.cr_text = SPDXNone()
144
- root_package.license_declared = NoAssert()
145
- doc.add_package(root_package)
146
- relationship = Relationship(f"{doc.spdx_id} DESCRIBES {root_package.spdx_id}")
147
- doc.add_relationship(relationship)
174
+ relationship = Relationship(pkg_spdx_id, RelationshipType.DEPENDS_ON, rel_pkg_spdx_id)
175
+ doc.relationships.append(relationship)
176
+ if not root_package:
177
+ root_package = Package(name='root package',
178
+ spdx_id='SPDXRef-ROOT-PACKAGE',
179
+ download_location=SpdxNoAssertion())
180
+ root_package.files_analyzed = False
181
+ root_package.license_declared = SpdxNoAssertion()
182
+ doc.packages.append(root_package)
183
+ relationship = Relationship(doc.creation_info.spdx_id, RelationshipType.DESCRIBES, root_package.spdx_id)
184
+ doc.relationships.append(relationship)
185
+
148
186
  except Exception as e:
149
187
  success = False
150
188
  error_msg = f'Failed to create spdx document object:{e}, {traceback.format_exc()}'
@@ -152,24 +190,18 @@ def write_spdx(output_file_without_ext, output_extension, sheet_list,
152
190
  success = False
153
191
  error_msg = 'No item to write in output file.'
154
192
 
193
+ validation_messages = validate_full_spdx_document(doc)
194
+ for message in validation_messages:
195
+ logger.warning(message.validation_message)
196
+ logger.warning(message.context)
197
+
198
+ # assert validation_messages == []
199
+
155
200
  result_file = ''
156
201
  if success:
157
202
  result_file = output_file_without_ext + output_extension
158
203
  try:
159
- out_mode = "w"
160
- if result_file.endswith(".tag"):
161
- writer_module = tagvalue
162
- elif result_file.endswith(".json"):
163
- writer_module = json
164
- elif result_file.endswith(".xml"):
165
- writer_module = xml
166
- elif result_file.endswith(".yaml"):
167
- writer_module = yaml
168
- else:
169
- raise Exception("FileType Not Supported")
170
-
171
- with open(result_file, out_mode) as out:
172
- writer_module.write_document(doc, out, True)
204
+ write_file(doc, result_file)
173
205
  except Exception as e:
174
206
  success = False
175
207
  error_msg = f'Failed to write spdx document: {e}'
@@ -4,9 +4,10 @@
4
4
  # SPDX-License-Identifier: Apache-2.0
5
5
  import os
6
6
  from pathlib import Path
7
+ from typing import Tuple
7
8
 
8
9
 
9
- def write_txt_file(file_to_create, str_to_write):
10
+ def write_txt_file(file_to_create: str, str_to_write: str) -> Tuple[bool, str]:
10
11
  success = True
11
12
  error_msg = ""
12
13
  try:
@@ -2,60 +2,49 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  # Copyright (c) 2022 LG Electronics Inc.
4
4
  # SPDX-License-Identifier: Apache-2.0
5
-
6
5
  import yaml
7
6
  import logging
8
7
  import os
9
- import copy
8
+ import json
10
9
  from pathlib import Path
11
- import fosslight_util.constant as constant
12
- from fosslight_util.oss_item import OssItem
13
- from fosslight_util.write_excel import _EMPTY_ITEM_MSG
10
+ from fosslight_util.constant import LOGGER_NAME, SHEET_NAME_FOR_SCANNER
11
+ from typing import Tuple
14
12
 
15
- _logger = logging.getLogger(constant.LOGGER_NAME)
13
+ _logger = logging.getLogger(LOGGER_NAME)
16
14
 
17
15
 
18
- def write_yaml(output_file, sheet_list_origin, separate_yaml=False):
16
+ def write_yaml(output_file, scan_item, separate_yaml=False) -> Tuple[bool, str, str]:
19
17
  success = True
20
18
  error_msg = ""
21
19
  output = ""
22
20
 
23
21
  try:
24
- sheet_list = copy.deepcopy(sheet_list_origin)
25
- if sheet_list:
26
- output_files = []
27
- output_dir = os.path.dirname(output_file)
28
-
29
- Path(output_dir).mkdir(parents=True, exist_ok=True)
30
- if separate_yaml:
31
- filename = os.path.splitext(os.path.basename(output_file))[0]
32
- separate_output_file = os.path.join(output_dir, filename)
33
-
34
- merge_sheet = []
35
- for sheet_name, sheet_contents in sheet_list.items():
36
- if sheet_name not in constant.supported_sheet_and_scanner.keys():
37
- continue
38
- scanner_name = constant.supported_sheet_and_scanner[sheet_name]
39
- sheet_contents_with_scanner = []
40
- for i in sheet_contents:
41
- i.insert(0, scanner_name)
42
- sheet_contents_with_scanner.append(i)
43
- if not separate_yaml:
44
- merge_sheet.extend(sheet_contents_with_scanner)
45
- else:
46
- output_file = f'{separate_output_file}_{sheet_name}.yaml'
47
- convert_sheet_to_yaml(sheet_contents_with_scanner, output_file)
48
- output_files.append(output_file)
22
+ output_files = []
23
+ output_dir = os.path.dirname(output_file)
24
+
25
+ Path(output_dir).mkdir(parents=True, exist_ok=True)
26
+ if separate_yaml:
27
+ filename = os.path.splitext(os.path.basename(output_file))[0]
28
+ separate_output_file = os.path.join(output_dir, filename)
29
+
30
+ merge_sheet = []
31
+ for scanner_name, _ in scan_item.file_items.items():
32
+ sheet_name = SHEET_NAME_FOR_SCANNER[scanner_name.lower()]
33
+ json_contents = scan_item.get_print_json(scanner_name)
49
34
 
50
35
  if not separate_yaml:
51
- convert_sheet_to_yaml(merge_sheet, output_file)
36
+ merge_sheet.extend(json_contents)
37
+ else:
38
+ output_file = f'{separate_output_file}_{sheet_name}.yaml'
39
+ remove_duplicates_and_dump_yaml(json_contents, output_file)
52
40
  output_files.append(output_file)
53
41
 
54
- if output_files:
55
- output = ", ".join(output_files)
56
- else:
57
- success = False
58
- error_msg = _EMPTY_ITEM_MSG
42
+ if not separate_yaml:
43
+ remove_duplicates_and_dump_yaml(merge_sheet, output_file)
44
+ output_files.append(output_file)
45
+
46
+ if output_files:
47
+ output = ", ".join(output_files)
59
48
  except Exception as ex:
60
49
  error_msg = str(ex)
61
50
  success = False
@@ -66,37 +55,37 @@ def write_yaml(output_file, sheet_list_origin, separate_yaml=False):
66
55
  return success, error_msg, output
67
56
 
68
57
 
69
- def convert_sheet_to_yaml(sheet_contents_with_scanner, output_file):
70
- sheet_contents_with_scanner = [list(t) for t in set(tuple(e) for e in sorted(sheet_contents_with_scanner))]
58
+ def remove_duplicates_and_dump_yaml(json_contents, output_file):
59
+ unique_json_strings = {json.dumps(e, sort_keys=True) for e in json_contents}
60
+ unique_json_contents = [json.loads(e) for e in unique_json_strings]
71
61
 
72
62
  yaml_dict = {}
73
- for sheet_item in sheet_contents_with_scanner:
74
- item = OssItem('')
75
- item.set_sheet_item(sheet_item[1:], sheet_item[0])
76
- create_yaml_with_ossitem(item, yaml_dict)
63
+ for uitem in unique_json_contents:
64
+ create_yaml_with_ossitem(uitem, yaml_dict)
77
65
 
78
66
  with open(output_file, 'w') as f:
79
67
  yaml.dump(yaml_dict, f, default_flow_style=False, sort_keys=False)
80
68
 
81
69
 
82
70
  def create_yaml_with_ossitem(item, yaml_dict):
83
- item_json = item.get_print_json()
84
- item_name = item_json.pop("name")
71
+ item_name = item.pop("name")
85
72
 
86
73
  if item_name not in yaml_dict.keys():
87
74
  yaml_dict[item_name] = []
88
75
  merged = False
89
76
  for oss_info in yaml_dict[item_name]:
90
- if oss_info.get('version', '') == item.version and \
91
- oss_info.get('license', []) == item.license and \
92
- oss_info.get('copyright text', '') == item.copyright and \
93
- oss_info.get('homepage', '') == item.homepage and \
94
- oss_info.get('download location', '') == item.download_location and \
95
- oss_info.get('exclude', False) == item.exclude:
96
- oss_info.get('source path', []).extend(item.source_name_or_path)
77
+ if oss_info.get('version', '') == item.get('version', '') and \
78
+ oss_info.get('license', []) == item.get('license', []) and \
79
+ oss_info.get('copyright text', '') == item.get('copyright text', '') and \
80
+ oss_info.get('homepage', '') == item.get('homepage', '') and \
81
+ oss_info.get('download location', '') == item.get('download location', '') and \
82
+ oss_info.get('exclude', False) == item.get('exclude', False):
83
+ if isinstance(oss_info.get('source path', []), str):
84
+ oss_info['source path'] = [oss_info.get('source path', '')]
85
+ oss_info.get('source path', []).append(item.get('source path', ''))
97
86
  oss_info.pop('comment', None)
98
87
  merged = True
99
88
  break
100
89
 
101
90
  if not merged:
102
- yaml_dict[item_name].append(item_json)
91
+ yaml_dict[item_name].append(item)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-util
3
- Version: 1.4.48
3
+ Version: 2.0.1
4
4
  Summary: FOSSLight Util
5
5
  Home-page: https://github.com/fosslight/fosslight_util
6
6
  Author: LG Electronics
@@ -18,7 +18,6 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Description-Content-Type: text/markdown
19
19
  Requires-Dist: XlsxWriter
20
20
  Requires-Dist: pandas
21
- Requires-Dist: xlrd ==1.2.0
22
21
  Requires-Dist: openpyxl
23
22
  Requires-Dist: progress
24
23
  Requires-Dist: PyYAML
@@ -27,14 +26,14 @@ Requires-Dist: coloredlogs
27
26
  Requires-Dist: python3-wget
28
27
  Requires-Dist: beautifulsoup4
29
28
  Requires-Dist: jsonmerge
30
- Requires-Dist: spdx-tools ==0.7.0rc0
31
- Requires-Dist: setuptools >=65.5.1
29
+ Requires-Dist: spdx-tools
30
+ Requires-Dist: setuptools>=65.5.1
32
31
  Requires-Dist: npm
33
32
  Requires-Dist: requests
34
- Requires-Dist: numpy ; python_version < "3.8"
35
- Requires-Dist: numpy >=1.22.2 ; python_version >= "3.8"
36
- Requires-Dist: pygit2 ==1.6.1 ; python_version<'3.7'
37
- Requires-Dist: pygit2 >=1.10.1 ; python_version>='3.7'
33
+ Requires-Dist: numpy; python_version < "3.8"
34
+ Requires-Dist: numpy>=1.22.2; python_version >= "3.8"
35
+ Requires-Dist: pygit2==1.6.1; python_version < "3.7"
36
+ Requires-Dist: pygit2>=1.10.1; python_version >= "3.7"
38
37
 
39
38
  <!--
40
39
  Copyright (c) 2021 LG Electronics
@@ -0,0 +1,31 @@
1
+ fosslight_util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ fosslight_util/_get_downloadable_url.py,sha256=63ZPI4KCpUFgL4oheKm8zvekuCRzpwNkVaLJcA-uA90,9010
3
+ fosslight_util/compare_yaml.py,sha256=znKz8sp6dk9wwBkJl-MQmkKTmL1IKNOrBWZklW7QVtU,2790
4
+ fosslight_util/constant.py,sha256=Ig3ACm9_QirE4389Wt-IfxOqRkVOUjqGnX1B05z2Byo,2151
5
+ fosslight_util/convert_excel_to_yaml.py,sha256=OJ11av4bsoxnVS15aa2aX-X3zGYUZW6M3118TPtHHTc,2323
6
+ fosslight_util/correct.py,sha256=3iUipan8ZX8sbyIIGAPtMkAGvZ4YucjeJwx1K1Bx_z4,3897
7
+ fosslight_util/cover.py,sha256=qqqKzxqFwKimal764FaugRUBcHWdeKt8af6xeK0mH8E,2040
8
+ fosslight_util/download.py,sha256=X-R2RTWwmhx_LSIBZhIxzPTJZ2GwasZnhIsZ5m3hUig,14997
9
+ fosslight_util/help.py,sha256=M3_XahUkP794US9Q0NS6ujmGvrFFnKBHsTU95Fg1KpA,2181
10
+ fosslight_util/oss_item.py,sha256=lDbBzKDG0diId39Rk-kqtwGtTLpdATDPtkP47FhlkMA,6382
11
+ fosslight_util/output_format.py,sha256=je3oVrDDnA160jIkFGpCHlG9Fc4YDlkQGwor2LFSmb0,8173
12
+ fosslight_util/parsing_yaml.py,sha256=2zx_N5lMkXT1dRmfJMpzlrru-y_2F_CkVbGlba6vQpU,5380
13
+ fosslight_util/read_excel.py,sha256=-QvrdxaNqYOpIm1H7ZqIEh5NLvFPymZo6BAOZcQmQug,5263
14
+ fosslight_util/set_log.py,sha256=Xpa94AiOyGEK8ucaYkvkAllvlen1Pq_d6UG6kPYBYBc,3780
15
+ fosslight_util/spdx_licenses.py,sha256=GvMNe_D4v2meapTVwPu2BJXInnTo3_gIzg669eJhUu0,3691
16
+ fosslight_util/timer_thread.py,sha256=5VbZENQPD-N0NUmzEktqGr6Am-e7vxD79K05mmr29g0,433
17
+ fosslight_util/write_excel.py,sha256=G0fIslbWoOtWZCJxbBGLCpUKbhmwrrqhI5PHwRw8_44,9931
18
+ fosslight_util/write_opossum.py,sha256=ltmo6SkugKWdAYupeCqwE4-3lua0GwLpix1XqFC-tT8,11678
19
+ fosslight_util/write_scancodejson.py,sha256=81n7cWNYoyIKE_V4Kx5YtL2CgjMPIjoKdnSU3inkpJY,2163
20
+ fosslight_util/write_spdx.py,sha256=azAaZmkIeFhx9YlV644B59K7SYkLMxQbtAr2mwixwBs,11265
21
+ fosslight_util/write_txt.py,sha256=BEFjYBppqk1CITx-fUN4vfvKv0XCs1GXWtc2Iu-etU4,629
22
+ fosslight_util/write_yaml.py,sha256=QlEKoIPQsEaYERfbP53TeKgnllYzhLQWm5wYjnWtVjE,3238
23
+ fosslight_util/resources/frequentLicenselist.json,sha256=GUhzK6tu7ok10fekOnmVmUgIGRC-acGABZKTNKfDyYA,4776157
24
+ fosslight_util/resources/frequent_license_nick_list.json,sha256=ryU2C_6ZxHbz90_sUN9OvI9GXkCMLu7oGcmd9W79YYo,5005
25
+ fosslight_util/resources/licenses.json,sha256=mK55z-bhY7Mjpj2KsO1crKGGL-X3F6MBFQJ0zLlx010,240843
26
+ fosslight_util-2.0.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ fosslight_util-2.0.1.dist-info/METADATA,sha256=ESvt6K7SJ-ft5Lgt-5eNBzNv9Ss8EeJ4c5aYGB8it6s,6374
28
+ fosslight_util-2.0.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
29
+ fosslight_util-2.0.1.dist-info/entry_points.txt,sha256=bzXX5i7HZ13V8BLKvtu_9KO3ZjtRypH-XszOXT6I3bU,69
30
+ fosslight_util-2.0.1.dist-info/top_level.txt,sha256=2qyYWGLakgBRy4BqoBNt-I5C29tBr_e93e5e1pbuTGA,15
31
+ fosslight_util-2.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,31 +0,0 @@
1
- fosslight_util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- fosslight_util/_get_downloadable_url.py,sha256=63ZPI4KCpUFgL4oheKm8zvekuCRzpwNkVaLJcA-uA90,9010
3
- fosslight_util/compare_yaml.py,sha256=0bapoyS0yrzkiK70K57E8-3wZ_D6mZAJ-24Eq9TYBlk,2632
4
- fosslight_util/constant.py,sha256=j9uhncoC2Fn4j4ATNsjUoS91nVXhyGzU6xLyWFj941A,1834
5
- fosslight_util/convert_excel_to_yaml.py,sha256=7ZsAMMQJIEXrmcl_28nSHvFpGMi1ZiRZYpEfI5O8vP8,2298
6
- fosslight_util/correct.py,sha256=O8c4vIl5Hdc46Ijr63LfcTjIZE5fgqN2iKRadHqluUU,6253
7
- fosslight_util/cover.py,sha256=qqqKzxqFwKimal764FaugRUBcHWdeKt8af6xeK0mH8E,2040
8
- fosslight_util/download.py,sha256=X-R2RTWwmhx_LSIBZhIxzPTJZ2GwasZnhIsZ5m3hUig,14997
9
- fosslight_util/help.py,sha256=xhAf43fuRLOU3TE7jqaxVTizVn4aANDvHaHYQAdaqYc,2154
10
- fosslight_util/oss_item.py,sha256=Wc2ka8cZc3D9JiJXl4-Y69A_qcGuyMiyYq053Srq638,7267
11
- fosslight_util/output_format.py,sha256=ltHniHwu9y0i-OV-Go1tWiqJBAnWgiVMlLV_cd_Ymlg,4907
12
- fosslight_util/parsing_yaml.py,sha256=m1kg6sYBJTmLmobsD-fjFxOz2NuIVjUvoEvXxmvBOpU,4561
13
- fosslight_util/read_excel.py,sha256=3zW2F6Azj4ufsrStBQGArBDCLG-BTJGG54HIqMxlx_A,5392
14
- fosslight_util/set_log.py,sha256=GsUtbtqmYKgBltHzeaxV3H9gaUWMYQYDJEhr_LdEGoo,3258
15
- fosslight_util/spdx_licenses.py,sha256=r90hUY4_T-XrHIJHLx1Ox3gWZ3qzdZj9rJFo7AwmkPE,3641
16
- fosslight_util/timer_thread.py,sha256=5VbZENQPD-N0NUmzEktqGr6Am-e7vxD79K05mmr29g0,433
17
- fosslight_util/write_excel.py,sha256=na3XB_rIr9ekCugGUMCE-AqrndCbvqhmzhoCO0pZRJk,12298
18
- fosslight_util/write_opossum.py,sha256=PGJV5DysNJvIFbzsyGXxh_kRcvZuHAOmLs-WlXP8qMI,11831
19
- fosslight_util/write_scancodejson.py,sha256=CSKjuwbA04nK5ogXklNsCBgGDZXPr805T8KPLgvx71U,2282
20
- fosslight_util/write_spdx.py,sha256=B_aHv9vScgZI5gHo5Hd56ckNWOHdyAQebRV54bTx9ec,9542
21
- fosslight_util/write_txt.py,sha256=Ms8E2wbc0U84IYP0dxTAbIfX5PzpQG3xblu8lv1w8J0,574
22
- fosslight_util/write_yaml.py,sha256=nzuIPdjOAOM4NS5VtU-KFrft41fKEF05-cl0OlEHj7Y,3657
23
- fosslight_util/resources/frequentLicenselist.json,sha256=GUhzK6tu7ok10fekOnmVmUgIGRC-acGABZKTNKfDyYA,4776157
24
- fosslight_util/resources/frequent_license_nick_list.json,sha256=ryU2C_6ZxHbz90_sUN9OvI9GXkCMLu7oGcmd9W79YYo,5005
25
- fosslight_util/resources/licenses.json,sha256=mK55z-bhY7Mjpj2KsO1crKGGL-X3F6MBFQJ0zLlx010,240843
26
- fosslight_util-1.4.48.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
- fosslight_util-1.4.48.dist-info/METADATA,sha256=U88pKw2oNZkRupvkU6Gwn2txiPm7yI1sGI1L0GdWrQA,6418
28
- fosslight_util-1.4.48.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
29
- fosslight_util-1.4.48.dist-info/entry_points.txt,sha256=bzXX5i7HZ13V8BLKvtu_9KO3ZjtRypH-XszOXT6I3bU,69
30
- fosslight_util-1.4.48.dist-info/top_level.txt,sha256=2qyYWGLakgBRy4BqoBNt-I5C29tBr_e93e5e1pbuTGA,15
31
- fosslight_util-1.4.48.dist-info/RECORD,,