fosslight-util 1.4.40__py3-none-any.whl → 1.4.42__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/correct.py +4 -3
- fosslight_util/download.py +25 -4
- fosslight_util/oss_item.py +58 -11
- fosslight_util/parsing_yaml.py +6 -0
- fosslight_util/read_excel.py +4 -1
- fosslight_util/write_excel.py +4 -0
- fosslight_util/write_yaml.py +11 -6
- {fosslight_util-1.4.40.dist-info → fosslight_util-1.4.42.dist-info}/METADATA +7 -2
- {fosslight_util-1.4.40.dist-info → fosslight_util-1.4.42.dist-info}/RECORD +13 -13
- {fosslight_util-1.4.40.dist-info → fosslight_util-1.4.42.dist-info}/LICENSE +0 -0
- {fosslight_util-1.4.40.dist-info → fosslight_util-1.4.42.dist-info}/WHEEL +0 -0
- {fosslight_util-1.4.40.dist-info → fosslight_util-1.4.42.dist-info}/entry_points.txt +0 -0
- {fosslight_util-1.4.40.dist-info → fosslight_util-1.4.42.dist-info}/top_level.txt +0 -0
fosslight_util/correct.py
CHANGED
|
@@ -48,12 +48,13 @@ def correct_with_yaml(correct_filepath, path_to_scan, scanner_oss_list):
|
|
|
48
48
|
if sheet_name not in constant.supported_sheet_and_scanner.keys():
|
|
49
49
|
continue
|
|
50
50
|
correct_contents = copy.deepcopy(sheet_contents)
|
|
51
|
+
scanner_name = constant.supported_sheet_and_scanner[sheet_name]
|
|
51
52
|
for idx, oss_raw_item in enumerate(sheet_contents):
|
|
52
53
|
if len(oss_raw_item) < 9:
|
|
53
54
|
logger.warning(f"sheet list is too short ({len(oss_raw_item)}): {oss_raw_item}")
|
|
54
55
|
continue
|
|
55
56
|
oss_item = OssItem('')
|
|
56
|
-
oss_item.set_sheet_item(oss_raw_item)
|
|
57
|
+
oss_item.set_sheet_item(oss_raw_item, scanner_name)
|
|
57
58
|
|
|
58
59
|
matched_yi = []
|
|
59
60
|
oss_rel_path = os.path.normpath(os.path.join(rel_path, oss_item.source_name_or_path[0]))
|
|
@@ -75,13 +76,13 @@ def correct_with_yaml(correct_filepath, path_to_scan, scanner_oss_list):
|
|
|
75
76
|
if matched_oss_item.comment:
|
|
76
77
|
matched_oss_item.comment += '/'
|
|
77
78
|
matched_oss_item.comment += 'Loaded from sbom-info.yaml'
|
|
78
|
-
matched_oss_array = matched_oss_item.get_print_array()[0]
|
|
79
|
+
matched_oss_array = matched_oss_item.get_print_array(scanner_name)[0]
|
|
79
80
|
correct_contents.append(matched_oss_array)
|
|
80
81
|
oss_item.exclude = True
|
|
81
82
|
if oss_item.comment:
|
|
82
83
|
oss_item.comment += '/'
|
|
83
84
|
oss_item.comment += 'Excluded by sbom-info.yaml'
|
|
84
|
-
correct_contents[idx] = oss_item.get_print_array()[0]
|
|
85
|
+
correct_contents[idx] = oss_item.get_print_array(scanner_name)[0]
|
|
85
86
|
|
|
86
87
|
if sheet_name == 'SRC_FL_Source':
|
|
87
88
|
for n_idx, ni in enumerate(matched_yaml):
|
fosslight_util/download.py
CHANGED
|
@@ -61,13 +61,21 @@ def change_src_link_to_https(src_link):
|
|
|
61
61
|
return src_link
|
|
62
62
|
|
|
63
63
|
|
|
64
|
+
def change_ssh_link_to_https(src_link):
|
|
65
|
+
src_link = src_link.replace("git@github.com:", "https://github.com/")
|
|
66
|
+
return src_link
|
|
67
|
+
|
|
68
|
+
|
|
64
69
|
def parse_src_link(src_link):
|
|
65
|
-
src_info = {}
|
|
70
|
+
src_info = {"url": src_link}
|
|
66
71
|
src_link_changed = ""
|
|
67
|
-
if src_link.startswith("git://") or src_link.startswith("
|
|
72
|
+
if src_link.startswith("git://") or src_link.startswith("git@") \
|
|
73
|
+
or src_link.startswith("https://") or src_link.startswith("http://"):
|
|
68
74
|
src_link_split = src_link.split(';')
|
|
69
75
|
if src_link.startswith("git://github.com/"):
|
|
70
76
|
src_link_changed = change_src_link_to_https(src_link_split[0])
|
|
77
|
+
elif src_link.startswith("git@github.com:"):
|
|
78
|
+
src_link_changed = change_ssh_link_to_https(src_link_split[0])
|
|
71
79
|
else:
|
|
72
80
|
if "rubygems.org" in src_link:
|
|
73
81
|
src_info["rubygems"] = True
|
|
@@ -79,7 +87,7 @@ def parse_src_link(src_link):
|
|
|
79
87
|
src_info["url"] = src_link_changed
|
|
80
88
|
src_info["branch"] = branch_info
|
|
81
89
|
src_info["tag"] = tag_info
|
|
82
|
-
|
|
90
|
+
return src_info
|
|
83
91
|
|
|
84
92
|
|
|
85
93
|
def main():
|
|
@@ -205,11 +213,24 @@ def get_github_ossname(link):
|
|
|
205
213
|
return oss_name
|
|
206
214
|
|
|
207
215
|
|
|
216
|
+
def get_github_token(git_url):
|
|
217
|
+
github_token = ""
|
|
218
|
+
pattern = r'https://(.*?)@'
|
|
219
|
+
search = re.search(pattern, git_url)
|
|
220
|
+
if search:
|
|
221
|
+
github_token = search.group(1)
|
|
222
|
+
return github_token
|
|
223
|
+
|
|
224
|
+
|
|
208
225
|
def download_git_clone(git_url, target_dir, checkout_to="", tag="", branch=""):
|
|
209
226
|
ref_to_checkout = decide_checkout(checkout_to, tag, branch)
|
|
210
227
|
msg = ""
|
|
211
228
|
oss_name = get_github_ossname(git_url)
|
|
212
229
|
oss_version = ""
|
|
230
|
+
github_token = get_github_token(git_url)
|
|
231
|
+
callbacks = None
|
|
232
|
+
if github_token != "":
|
|
233
|
+
callbacks = git.RemoteCallbacks(credentials=git.UserPass("foo", github_token)) # username is not used, so set to dummy
|
|
213
234
|
|
|
214
235
|
if platform.system() != "Windows":
|
|
215
236
|
signal.signal(signal.SIGALRM, alarm_handler)
|
|
@@ -221,7 +242,7 @@ def download_git_clone(git_url, target_dir, checkout_to="", tag="", branch=""):
|
|
|
221
242
|
Path(target_dir).mkdir(parents=True, exist_ok=True)
|
|
222
243
|
repo = git.clone_repository(git_url, target_dir,
|
|
223
244
|
bare=False, repository=None,
|
|
224
|
-
remote=None, callbacks=
|
|
245
|
+
remote=None, callbacks=callbacks)
|
|
225
246
|
if platform.system() != "Windows":
|
|
226
247
|
signal.alarm(0)
|
|
227
248
|
else:
|
fosslight_util/oss_item.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import logging
|
|
7
7
|
import os
|
|
8
|
-
from fosslight_util.constant import LOGGER_NAME
|
|
8
|
+
from fosslight_util.constant import LOGGER_NAME, FL_DEPENDENCY, FL_BINARY
|
|
9
9
|
|
|
10
10
|
_logger = logging.getLogger(LOGGER_NAME)
|
|
11
11
|
|
|
@@ -25,6 +25,11 @@ class OssItem:
|
|
|
25
25
|
self._yocto_recipe = []
|
|
26
26
|
self._yocto_package = []
|
|
27
27
|
self.is_binary = False
|
|
28
|
+
self._depends_on = []
|
|
29
|
+
self.purl = ""
|
|
30
|
+
self.bin_vulnerability = ""
|
|
31
|
+
self.bin_tlsh = ""
|
|
32
|
+
self.bin_sha1 = ""
|
|
28
33
|
|
|
29
34
|
def __del__(self):
|
|
30
35
|
pass
|
|
@@ -123,11 +128,29 @@ class OssItem:
|
|
|
123
128
|
self._yocto_package = [item.strip() for item in self._yocto_package]
|
|
124
129
|
self._yocto_package = list(set(self._yocto_package))
|
|
125
130
|
|
|
126
|
-
|
|
131
|
+
@property
|
|
132
|
+
def depends_on(self):
|
|
133
|
+
return self._depends_on
|
|
134
|
+
|
|
135
|
+
@depends_on.setter
|
|
136
|
+
def depends_on(self, value):
|
|
137
|
+
if not value:
|
|
138
|
+
self._depends_on = []
|
|
139
|
+
else:
|
|
140
|
+
if not isinstance(value, list):
|
|
141
|
+
value = value.split(",")
|
|
142
|
+
self._depends_on.extend(value)
|
|
143
|
+
self._depends_on = [item.strip() for item in self._depends_on]
|
|
144
|
+
self._depends_on = list(set(self._depends_on))
|
|
145
|
+
|
|
146
|
+
def set_sheet_item(self, item, scanner_name=''):
|
|
127
147
|
if len(item) < 9:
|
|
128
148
|
_logger.warning(f"sheet list is too short ({len(item)}): {item}")
|
|
129
149
|
return
|
|
130
|
-
|
|
150
|
+
if scanner_name == FL_DEPENDENCY:
|
|
151
|
+
self.purl = item[0]
|
|
152
|
+
else:
|
|
153
|
+
self.source_name_or_path = item[0]
|
|
131
154
|
self.name = item[1]
|
|
132
155
|
self.version = item[2]
|
|
133
156
|
self.license = item[3]
|
|
@@ -137,19 +160,39 @@ class OssItem:
|
|
|
137
160
|
self.exclude = item[7]
|
|
138
161
|
self.comment = item[8]
|
|
139
162
|
|
|
140
|
-
|
|
163
|
+
if len(item) >= 10 and scanner_name == FL_DEPENDENCY:
|
|
164
|
+
self.depends_on = item[9]
|
|
165
|
+
if len(item) >= 10 and scanner_name == FL_BINARY:
|
|
166
|
+
self.bin_vulnerability = item[9]
|
|
167
|
+
if len(item) >= 12:
|
|
168
|
+
self.bin_tlsh = item[10]
|
|
169
|
+
self.bin_sha1 = item[11]
|
|
170
|
+
|
|
171
|
+
def get_print_array(self, scanner_name=''):
|
|
141
172
|
items = []
|
|
142
|
-
if
|
|
143
|
-
self.source_name_or_path
|
|
173
|
+
if scanner_name != FL_DEPENDENCY:
|
|
174
|
+
if len(self.source_name_or_path) == 0:
|
|
175
|
+
self.source_name_or_path.append("")
|
|
144
176
|
if len(self.license) == 0:
|
|
145
177
|
self.license.append("")
|
|
146
178
|
|
|
147
179
|
exclude = "Exclude" if self.exclude else ""
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
180
|
+
lic = ",".join(self.license)
|
|
181
|
+
if scanner_name == FL_DEPENDENCY:
|
|
182
|
+
items = [self.purl, self.name, self.version, lic,
|
|
183
|
+
self.download_location, self.homepage, self.copyright, exclude, self.comment]
|
|
184
|
+
if len(self.depends_on) > 0:
|
|
185
|
+
items.append(",".join(self.depends_on))
|
|
186
|
+
else:
|
|
187
|
+
for source_name_or_path in self.source_name_or_path:
|
|
188
|
+
if scanner_name == FL_BINARY:
|
|
189
|
+
oss_item = [os.path.join(self.relative_path, source_name_or_path), self.name, self.version, lic,
|
|
190
|
+
self.download_location, self.homepage, self.copyright, exclude, self.comment,
|
|
191
|
+
self.bin_vulnerability, self.bin_tlsh, self.bin_sha1]
|
|
192
|
+
else:
|
|
193
|
+
oss_item = [os.path.join(self.relative_path, source_name_or_path), self.name, self.version, lic,
|
|
194
|
+
self.download_location, self.homepage, self.copyright, exclude, self.comment]
|
|
195
|
+
items.append(oss_item)
|
|
153
196
|
return items
|
|
154
197
|
|
|
155
198
|
def get_print_json(self):
|
|
@@ -171,6 +214,10 @@ class OssItem:
|
|
|
171
214
|
json_item["exclude"] = self.exclude
|
|
172
215
|
if self.comment != "":
|
|
173
216
|
json_item["comment"] = self.comment
|
|
217
|
+
if len(self.depends_on) > 0:
|
|
218
|
+
json_item["depends on"] = self.depends_on
|
|
219
|
+
if self.purl != "":
|
|
220
|
+
json_item["purl"] = self.purl
|
|
174
221
|
|
|
175
222
|
return json_item
|
|
176
223
|
|
fosslight_util/parsing_yaml.py
CHANGED
|
@@ -115,6 +115,12 @@ def set_value_switch(oss, key, value, yaml_file=""):
|
|
|
115
115
|
oss.yocto_package = value
|
|
116
116
|
elif key == 'yocto_recipe':
|
|
117
117
|
oss.yocto_recipe = value
|
|
118
|
+
elif key == 'vulnerability link':
|
|
119
|
+
oss.bin_vulnerability = value
|
|
120
|
+
elif key == 'tlsh':
|
|
121
|
+
oss.bin_tlsh = value
|
|
122
|
+
elif key == 'sha1':
|
|
123
|
+
oss.bin_sha1 = value
|
|
118
124
|
else:
|
|
119
125
|
if yaml_file != "":
|
|
120
126
|
_logger.debug(f"file:{yaml_file} - key:{key} cannot be parsed")
|
fosslight_util/read_excel.py
CHANGED
|
@@ -75,7 +75,10 @@ def read_oss_report(excel_file: str, sheet_names: str = "") -> List[OssItem]:
|
|
|
75
75
|
"Exclude": IDX_CANNOT_FOUND,
|
|
76
76
|
"Copyright Text": IDX_CANNOT_FOUND,
|
|
77
77
|
"Comment": IDX_CANNOT_FOUND,
|
|
78
|
-
"File Name or Path": IDX_CANNOT_FOUND
|
|
78
|
+
"File Name or Path": IDX_CANNOT_FOUND,
|
|
79
|
+
"Vulnerability Link": IDX_CANNOT_FOUND,
|
|
80
|
+
"TLSH": IDX_CANNOT_FOUND,
|
|
81
|
+
"SHA1": IDX_CANNOT_FOUND
|
|
79
82
|
}
|
|
80
83
|
num_cols = xl_sheet.ncols
|
|
81
84
|
num_rows = xl_sheet.nrows
|
fosslight_util/write_excel.py
CHANGED
|
@@ -301,6 +301,10 @@ def merge_excels(find_excel_dir, final_out, merge_files='', cover=''):
|
|
|
301
301
|
sheet_name = f"{f_short_name}_{sheet_name}"
|
|
302
302
|
df_excel.to_excel(writer, sheet_name, index=False)
|
|
303
303
|
added_sheet_names.append(sheet_name)
|
|
304
|
+
|
|
305
|
+
if sheet_name == 'BIN_FL_Binary':
|
|
306
|
+
bin_sheet = writer.sheets[sheet_name]
|
|
307
|
+
bin_sheet.set_column("L:M", None, None, {"hidden": True}) # 'TLSH', 'SHA1' column hide
|
|
304
308
|
writer.close()
|
|
305
309
|
except Exception as ex:
|
|
306
310
|
msg = str(ex)
|
fosslight_util/write_yaml.py
CHANGED
|
@@ -35,11 +35,16 @@ def write_yaml(output_file, sheet_list_origin, separate_yaml=False):
|
|
|
35
35
|
for sheet_name, sheet_contents in sheet_list.items():
|
|
36
36
|
if sheet_name not in constant.supported_sheet_and_scanner.keys():
|
|
37
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)
|
|
38
43
|
if not separate_yaml:
|
|
39
|
-
merge_sheet.extend(
|
|
44
|
+
merge_sheet.extend(sheet_contents_with_scanner)
|
|
40
45
|
else:
|
|
41
46
|
output_file = f'{separate_output_file}_{sheet_name}.yaml'
|
|
42
|
-
convert_sheet_to_yaml(
|
|
47
|
+
convert_sheet_to_yaml(sheet_contents_with_scanner, output_file)
|
|
43
48
|
output_files.append(output_file)
|
|
44
49
|
|
|
45
50
|
if not separate_yaml:
|
|
@@ -61,13 +66,13 @@ def write_yaml(output_file, sheet_list_origin, separate_yaml=False):
|
|
|
61
66
|
return success, error_msg, output
|
|
62
67
|
|
|
63
68
|
|
|
64
|
-
def convert_sheet_to_yaml(
|
|
65
|
-
|
|
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))]
|
|
66
71
|
|
|
67
72
|
yaml_dict = {}
|
|
68
|
-
for sheet_item in
|
|
73
|
+
for sheet_item in sheet_contents_with_scanner:
|
|
69
74
|
item = OssItem('')
|
|
70
|
-
item.set_sheet_item(sheet_item)
|
|
75
|
+
item.set_sheet_item(sheet_item[1:], sheet_item[0])
|
|
71
76
|
create_yaml_with_ossitem(item, yaml_dict)
|
|
72
77
|
|
|
73
78
|
with open(output_file, 'w') as f:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fosslight-util
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.42
|
|
4
4
|
Summary: FOSSLight Util
|
|
5
5
|
Home-page: https://github.com/fosslight/fosslight_util
|
|
6
6
|
Author: LG Electronics
|
|
@@ -152,6 +152,7 @@ If you give a link, the source is downloaded to the target directory through git
|
|
|
152
152
|
|
|
153
153
|
#### How it works
|
|
154
154
|
1. Try git clone.
|
|
155
|
+
1-1. If the link is ssh-url, convert to https-url.
|
|
155
156
|
2. If git clone fails, download it with wget and extract the compressed file.
|
|
156
157
|
3. After extracting the compressed file, delete the compressed file.
|
|
157
158
|
|
|
@@ -165,7 +166,11 @@ If you give a link, the source is downloaded to the target directory through git
|
|
|
165
166
|
|
|
166
167
|
#### How to run
|
|
167
168
|
```
|
|
168
|
-
$ fosslight_download
|
|
169
|
+
$ fosslight_download -s "https://github.com/LGE-OSS/example" -t target_dir/
|
|
170
|
+
```
|
|
171
|
+
If you want to try with private repository, set your github token like below.
|
|
172
|
+
```
|
|
173
|
+
$ fosslight_download -s "https://my_github_token@github.com/Foo/private_repo -t target_dir/"
|
|
169
174
|
```
|
|
170
175
|
|
|
171
176
|
## 👏 How to report issue
|
|
@@ -3,29 +3,29 @@ fosslight_util/_get_downloadable_url.py,sha256=63ZPI4KCpUFgL4oheKm8zvekuCRzpwNkV
|
|
|
3
3
|
fosslight_util/compare_yaml.py,sha256=0bapoyS0yrzkiK70K57E8-3wZ_D6mZAJ-24Eq9TYBlk,2632
|
|
4
4
|
fosslight_util/constant.py,sha256=j9uhncoC2Fn4j4ATNsjUoS91nVXhyGzU6xLyWFj941A,1834
|
|
5
5
|
fosslight_util/convert_excel_to_yaml.py,sha256=7ZsAMMQJIEXrmcl_28nSHvFpGMi1ZiRZYpEfI5O8vP8,2298
|
|
6
|
-
fosslight_util/correct.py,sha256=
|
|
6
|
+
fosslight_util/correct.py,sha256=v4OL8XssYuatcP9G0YhnLChWUiJP8rwoyWDeMmQGT0E,5334
|
|
7
7
|
fosslight_util/cover.py,sha256=21l-BS3ZJ8nDxMLHKGT9igB3XbCme55A0eQf01jbISM,1436
|
|
8
|
-
fosslight_util/download.py,sha256=
|
|
8
|
+
fosslight_util/download.py,sha256=4_s1zPEpxPQ7FNkDo0f6MdrQLMOVdjifDO7Y5psqAq8,14484
|
|
9
9
|
fosslight_util/help.py,sha256=xhAf43fuRLOU3TE7jqaxVTizVn4aANDvHaHYQAdaqYc,2154
|
|
10
|
-
fosslight_util/oss_item.py,sha256=
|
|
10
|
+
fosslight_util/oss_item.py,sha256=JxGokv79z_6Ca4-Aquc_zZEvRqu-xmBunP8Lvy6AIjY,7268
|
|
11
11
|
fosslight_util/output_format.py,sha256=kJpuTuS3XTrsdUd2gsl5GWto5KtJfSej-qkD9azZFdQ,2982
|
|
12
|
-
fosslight_util/parsing_yaml.py,sha256=
|
|
13
|
-
fosslight_util/read_excel.py,sha256=
|
|
12
|
+
fosslight_util/parsing_yaml.py,sha256=R2aecMLDoWR-bBdD8qiW0OTn7F5ZC5YNd1Of0YYEJxU,4514
|
|
13
|
+
fosslight_util/read_excel.py,sha256=21T12bSaB69Yp19n-o2qpHMJNWUFoytneaNneRp3qCA,5294
|
|
14
14
|
fosslight_util/set_log.py,sha256=8cFGpr4HMk4grHo3a5keR4V1xWBscbjowYPxyrh42ks,3140
|
|
15
15
|
fosslight_util/spdx_licenses.py,sha256=r90hUY4_T-XrHIJHLx1Ox3gWZ3qzdZj9rJFo7AwmkPE,3641
|
|
16
16
|
fosslight_util/timer_thread.py,sha256=5VbZENQPD-N0NUmzEktqGr6Am-e7vxD79K05mmr29g0,433
|
|
17
|
-
fosslight_util/write_excel.py,sha256=
|
|
17
|
+
fosslight_util/write_excel.py,sha256=FJFmCs6_vJTYNDgp-Cwk0ylkMTjN3u3_Wgxy0yoiGqo,12306
|
|
18
18
|
fosslight_util/write_opossum.py,sha256=PGJV5DysNJvIFbzsyGXxh_kRcvZuHAOmLs-WlXP8qMI,11831
|
|
19
19
|
fosslight_util/write_scancodejson.py,sha256=CSKjuwbA04nK5ogXklNsCBgGDZXPr805T8KPLgvx71U,2282
|
|
20
20
|
fosslight_util/write_spdx.py,sha256=B_aHv9vScgZI5gHo5Hd56ckNWOHdyAQebRV54bTx9ec,9542
|
|
21
21
|
fosslight_util/write_txt.py,sha256=Ms8E2wbc0U84IYP0dxTAbIfX5PzpQG3xblu8lv1w8J0,574
|
|
22
|
-
fosslight_util/write_yaml.py,sha256=
|
|
22
|
+
fosslight_util/write_yaml.py,sha256=iJcG3ItggoBp8p3m8PAZwULehKo3BlH1qW2rZzlDv8g,3665
|
|
23
23
|
fosslight_util/resources/frequentLicenselist.json,sha256=GUhzK6tu7ok10fekOnmVmUgIGRC-acGABZKTNKfDyYA,4776157
|
|
24
24
|
fosslight_util/resources/frequent_license_nick_list.json,sha256=ryU2C_6ZxHbz90_sUN9OvI9GXkCMLu7oGcmd9W79YYo,5005
|
|
25
25
|
fosslight_util/resources/licenses.json,sha256=mK55z-bhY7Mjpj2KsO1crKGGL-X3F6MBFQJ0zLlx010,240843
|
|
26
|
-
fosslight_util-1.4.
|
|
27
|
-
fosslight_util-1.4.
|
|
28
|
-
fosslight_util-1.4.
|
|
29
|
-
fosslight_util-1.4.
|
|
30
|
-
fosslight_util-1.4.
|
|
31
|
-
fosslight_util-1.4.
|
|
26
|
+
fosslight_util-1.4.42.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
27
|
+
fosslight_util-1.4.42.dist-info/METADATA,sha256=Gwh1UV3hbzKi2Urxb-w9bJzw9uA1YzrTySAD-7C4ohU,6418
|
|
28
|
+
fosslight_util-1.4.42.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
29
|
+
fosslight_util-1.4.42.dist-info/entry_points.txt,sha256=bzXX5i7HZ13V8BLKvtu_9KO3ZjtRypH-XszOXT6I3bU,69
|
|
30
|
+
fosslight_util-1.4.42.dist-info/top_level.txt,sha256=2qyYWGLakgBRy4BqoBNt-I5C29tBr_e93e5e1pbuTGA,15
|
|
31
|
+
fosslight_util-1.4.42.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|