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.
- fosslight_util/compare_yaml.py +18 -11
- fosslight_util/constant.py +11 -0
- fosslight_util/convert_excel_to_yaml.py +1 -1
- fosslight_util/correct.py +47 -91
- fosslight_util/help.py +3 -4
- fosslight_util/oss_item.py +150 -155
- fosslight_util/output_format.py +88 -12
- fosslight_util/parsing_yaml.py +45 -30
- fosslight_util/read_excel.py +29 -35
- fosslight_util/set_log.py +20 -3
- fosslight_util/spdx_licenses.py +2 -1
- fosslight_util/write_excel.py +88 -156
- fosslight_util/write_opossum.py +14 -20
- fosslight_util/write_scancodejson.py +31 -31
- fosslight_util/write_spdx.py +147 -115
- fosslight_util/write_txt.py +2 -1
- fosslight_util/write_yaml.py +43 -54
- {fosslight_util-1.4.48.dist-info → fosslight_util-2.0.1.dist-info}/METADATA +7 -8
- fosslight_util-2.0.1.dist-info/RECORD +31 -0
- {fosslight_util-1.4.48.dist-info → fosslight_util-2.0.1.dist-info}/WHEEL +1 -1
- fosslight_util-1.4.48.dist-info/RECORD +0 -31
- {fosslight_util-1.4.48.dist-info → fosslight_util-2.0.1.dist-info}/LICENSE +0 -0
- {fosslight_util-1.4.48.dist-info → fosslight_util-2.0.1.dist-info}/entry_points.txt +0 -0
- {fosslight_util-1.4.48.dist-info → fosslight_util-2.0.1.dist-info}/top_level.txt +0 -0
fosslight_util/write_spdx.py
CHANGED
|
@@ -8,23 +8,30 @@ import uuid
|
|
|
8
8
|
import logging
|
|
9
9
|
import re
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from
|
|
12
|
-
from spdx.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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(
|
|
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,
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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(
|
|
137
|
-
doc.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
|
|
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}'
|
fosslight_util/write_txt.py
CHANGED
|
@@ -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:
|
fosslight_util/write_yaml.py
CHANGED
|
@@ -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
|
|
8
|
+
import json
|
|
10
9
|
from pathlib import Path
|
|
11
|
-
|
|
12
|
-
from
|
|
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(
|
|
13
|
+
_logger = logging.getLogger(LOGGER_NAME)
|
|
16
14
|
|
|
17
15
|
|
|
18
|
-
def write_yaml(output_file,
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
70
|
-
|
|
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
|
|
74
|
-
|
|
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
|
-
|
|
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.
|
|
95
|
-
oss_info.get('exclude', False) == item.exclude:
|
|
96
|
-
oss_info.get('source 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(
|
|
91
|
+
yaml_dict[item_name].append(item)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fosslight-util
|
|
3
|
-
Version:
|
|
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
|
|
31
|
-
Requires-Dist: setuptools
|
|
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
|
|
35
|
-
Requires-Dist: numpy
|
|
36
|
-
Requires-Dist: pygit2
|
|
37
|
-
Requires-Dist: pygit2
|
|
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,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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|