fosslight-dependency 3.13.8__py3-none-any.whl → 3.14.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.
@@ -25,7 +25,7 @@ HELM = 'helm'
25
25
 
26
26
  # Supported package name and manifest file
27
27
  SUPPORT_PACKAE = {
28
- PYPI: ['requirements.txt', 'setup.py'],
28
+ PYPI: ['requirements.txt', 'setup.py', 'pyproject.toml'],
29
29
  NPM: 'package.json',
30
30
  MAVEN: 'pom.xml',
31
31
  GRADLE: 'build.gradle',
@@ -86,7 +86,7 @@ class Cocoapods(PackageManager):
86
86
  try:
87
87
  comment_list = []
88
88
  deps_list = []
89
- if self.direct_dep:
89
+ if self.direct_dep and (len(self.direct_dep_list) > 0):
90
90
  if pod_oss_name_origin in self.direct_dep_list:
91
91
  comment_list.append('direct')
92
92
  else:
@@ -98,10 +98,12 @@ class Cocoapods(PackageManager):
98
98
  comment = ','.join(comment_list)
99
99
  deps = ','.join(deps_list)
100
100
 
101
+ oss_name_report = f'{self.package_manager_name}:{pod_oss_name_origin}'
101
102
  pod_oss_name = pod_oss_name_origin
102
103
  if '/' in pod_oss_name_origin:
103
104
  pod_oss_name = pod_oss_name_origin.split('/')[0]
104
105
  if pod_oss_name in external_source_list:
106
+ oss_name_report = pod_oss_name_origin
105
107
  podspec_filename = pod_oss_name + '.podspec.json'
106
108
  spec_file_path = os.path.join("Pods", "Local Podspecs", podspec_filename)
107
109
  else:
@@ -126,13 +128,14 @@ class Cocoapods(PackageManager):
126
128
  spec_file_path = os.path.join(file_path_without_version, pod_oss_version, file_path[-1])
127
129
 
128
130
  oss_name, oss_version, license_name, dn_loc, homepage = self.get_oss_in_podspec(spec_file_path)
131
+ if pod_oss_name in external_source_list:
132
+ homepage = dn_loc
129
133
  if oss_name == '':
130
134
  continue
131
135
  if pod_oss_version != oss_version:
132
136
  logger.warning(f'{pod_oss_name_origin} has different version({pod_oss_version})\
133
137
  with spec version({oss_version})')
134
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
135
- f'{self.package_manager_name}:{pod_oss_name_origin}',
138
+ sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name), oss_name_report,
136
139
  pod_oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
137
140
  except Exception as e:
138
141
  logger.warning(f"Fail to get {pod_oss_name_origin}:{e}")
@@ -44,25 +44,32 @@ class Helm(PackageManager):
44
44
  logger.error(f"Failed to build helm dependency: {cmd}")
45
45
  ret = False
46
46
  else:
47
- shutil.copytree(charts_dir, self.tmp_charts_dir)
48
- shutil.rmtree(charts_dir, ignore_errors=True)
49
-
50
- ret = extract_compressed_dir(self.tmp_charts_dir, self.tmp_charts_dir, False)
51
- if not ret:
52
- logger.error(f'Fail to extract compressed dir: {self.tmp_charts_dir}')
53
- else:
54
- logger.warning('Success to extract compressed dir')
47
+ if not os.path.isdir(charts_dir):
48
+ logger.warning(f"Cannot create {charts_dir} because of no dependencies in Chart.yaml. "
49
+ f"So you don't need to analyze dependency.")
50
+ return True
51
+ else:
52
+ shutil.copytree(charts_dir, self.tmp_charts_dir)
53
+ shutil.rmtree(charts_dir, ignore_errors=True)
54
+ if ret:
55
+ ret = extract_compressed_dir(self.tmp_charts_dir, self.tmp_charts_dir, False)
56
+ if not ret:
57
+ logger.error(f'Fail to extract compressed dir: {self.tmp_charts_dir}')
58
+ else:
59
+ logger.warning('Success to extract compressed dir')
55
60
 
56
61
  return ret
57
62
 
58
63
  def parse_oss_information(self, f_name):
59
64
  dep_item_list = []
60
65
  sheet_list = []
66
+ _dependencies = 'dependencies'
61
67
 
62
68
  with open(f_name, 'r', encoding='utf8') as yaml_fp:
63
69
  yaml_f = yaml.safe_load(yaml_fp)
64
- for dep in yaml_f['dependencies']:
65
- dep_item_list.append(dep['name'])
70
+ if _dependencies in yaml_f:
71
+ for dep in yaml_f[_dependencies]:
72
+ dep_item_list.append(dep['name'])
66
73
  for dep in dep_item_list:
67
74
  try:
68
75
  f_path = os.path.join(self.tmp_charts_dir, dep, f_name)
@@ -22,6 +22,7 @@ class Npm(PackageManager):
22
22
 
23
23
  dn_url = 'https://www.npmjs.com/package/'
24
24
  input_file_name = 'tmp_npm_license_output.json'
25
+ tmp_custom_json = 'custom.json'
25
26
  flag_tmp_node_modules = False
26
27
 
27
28
  def __init__(self, input_dir, output_dir):
@@ -32,6 +33,8 @@ class Npm(PackageManager):
32
33
  os.remove(self.input_file_name)
33
34
  if self.flag_tmp_node_modules:
34
35
  shutil.rmtree(node_modules, ignore_errors=True)
36
+ if os.path.exists(self.tmp_custom_json):
37
+ os.remove(self.tmp_custom_json)
35
38
 
36
39
  def run_plugin(self):
37
40
  ret = self.start_license_checker()
@@ -39,10 +42,9 @@ class Npm(PackageManager):
39
42
 
40
43
  def start_license_checker(self):
41
44
  ret = True
42
- tmp_custom_json = 'custom.json'
43
- license_checker_cmd = f'license-checker --excludePrivatePackages --production --json --out {self.input_file_name}'
45
+ license_checker_cmd = f'license-checker --production --json --out {self.input_file_name}'
44
46
  custom_path_option = ' --customPath '
45
- npm_install_cmd = 'npm install --omit=dev'
47
+ npm_install_cmd = 'npm install --production'
46
48
 
47
49
  if os.path.isdir(node_modules) != 1:
48
50
  logger.info(f"node_modules directory is not existed. So it executes '{npm_install_cmd}'.")
@@ -53,18 +55,18 @@ class Npm(PackageManager):
53
55
  return False
54
56
 
55
57
  # customized json file for obtaining specific items with license-checker
56
- self.make_custom_json(tmp_custom_json)
58
+ self.make_custom_json(self.tmp_custom_json)
57
59
 
58
- cmd = license_checker_cmd + custom_path_option + tmp_custom_json
60
+ cmd = license_checker_cmd + custom_path_option + self.tmp_custom_json
59
61
  cmd_ret = subprocess.call(cmd, shell=True)
60
62
  if cmd_ret != 0:
61
63
  logger.error(f"It returns the error: {cmd}")
62
64
  logger.error("Please check if the license-checker is installed.(sudo npm install -g license-checker)")
63
- return False
65
+ ret = False
64
66
  else:
65
67
  self.append_input_package_list_file(self.input_file_name)
66
-
67
- os.remove(tmp_custom_json)
68
+ if os.path.exists(self.tmp_custom_json):
69
+ os.remove(self.tmp_custom_json)
68
70
 
69
71
  return ret
70
72
 
@@ -111,7 +113,7 @@ class Npm(PackageManager):
111
113
  ret = False
112
114
  if ret:
113
115
  if result.returncode == 1:
114
- logger.warning(f'npm ls returns an error code: {result.stderr}')
116
+ logger.warning(f"'{cmd}' returns error code: {result.stderr}")
115
117
 
116
118
  try:
117
119
  rel_json = json.loads(rel_tree)
@@ -119,13 +121,16 @@ class Npm(PackageManager):
119
121
  ret = False
120
122
  else:
121
123
  self.package_name = f'{rel_json[_name]}({rel_json[_version]})'
122
- self.parse_rel_dependencies(rel_json[_name], rel_json[_version], rel_json[_dependencies])
124
+ if _dependencies in rel_json:
125
+ self.parse_rel_dependencies(rel_json[_name], rel_json[_version], rel_json[_dependencies])
123
126
  except Exception as e:
124
127
  ret = False
125
128
  err_msg = e
126
129
  return ret, err_msg
127
130
 
128
131
  def parse_direct_dependencies(self):
132
+ if not self.direct_dep:
133
+ return
129
134
  try:
130
135
  if os.path.isfile(const.SUPPORT_PACKAE.get(self.package_manager_name)):
131
136
  ret, err_msg = self.parse_transitive_relationship()
@@ -145,6 +150,9 @@ class Npm(PackageManager):
145
150
 
146
151
  sheet_list = []
147
152
  comment = ''
153
+ _licenses = 'licenses'
154
+ _repository = 'repository'
155
+ _private = 'private'
148
156
 
149
157
  keys = [key for key in json_data]
150
158
 
@@ -153,31 +161,38 @@ class Npm(PackageManager):
153
161
  oss_init_name = d['name']
154
162
  oss_name = self.package_manager_name + ":" + oss_init_name
155
163
 
156
- if d['licenses']:
157
- license_name = d['licenses']
164
+ if d[_licenses]:
165
+ license_name = d[_licenses]
158
166
  else:
159
167
  license_name = ''
160
168
 
161
169
  oss_version = d['version']
162
170
  package_path = d['path']
163
171
 
164
- if d['repository']:
165
- dn_loc = d['repository']
166
- else:
167
- dn_loc = f"{self.dn_url}{oss_init_name}/v/{oss_version}"
172
+ private_pkg = False
173
+ if _private in d:
174
+ if d[_private]:
175
+ private_pkg = True
168
176
 
169
177
  homepage = self.dn_url + oss_init_name
178
+ dn_loc = f"{self.dn_url}{oss_init_name}/v/{oss_version}"
179
+ if d[_repository]:
180
+ dn_loc = d[_repository]
181
+ elif private_pkg:
182
+ dn_loc = ''
170
183
 
171
184
  comment_list = []
172
185
  deps_list = []
173
- if self.direct_dep and len(self.relation_tree) > 0:
174
- if self.package_name == f'{oss_init_name}({oss_version})':
175
- comment_list.append('root package')
186
+ if private_pkg:
187
+ homepage = dn_loc
188
+ comment_list.append('private')
189
+ if self.package_name == f'{oss_init_name}({oss_version})':
190
+ comment_list.append('root package')
191
+ elif self.direct_dep and len(self.relation_tree) > 0:
192
+ if f'{oss_init_name}({oss_version})' in self.relation_tree[self.package_name]:
193
+ comment_list.append('direct')
176
194
  else:
177
- if f'{oss_init_name}({oss_version})' in self.relation_tree[self.package_name]:
178
- comment_list.append('direct')
179
- else:
180
- comment_list.append('transitive')
195
+ comment_list.append('transitive')
181
196
 
182
197
  if f'{oss_init_name}({oss_version})' in self.relation_tree:
183
198
  rel_items = [f'npm:{ri}' for ri in self.relation_tree[f'{oss_init_name}({oss_version})']]
@@ -75,10 +75,10 @@ class Pypi(PackageManager):
75
75
  install_cmd_list = []
76
76
  for manifest_file in manifest_files:
77
77
  if os.path.exists(manifest_file):
78
- if manifest_file == 'setup.py':
79
- install_cmd_list.append("pip install .")
80
- elif manifest_file == 'requirements.txt':
78
+ if manifest_file == 'requirements.txt':
81
79
  install_cmd_list.append("pip install -r requirements.txt")
80
+ else:
81
+ install_cmd_list.append("pip install .")
82
82
  else:
83
83
  manifest_files.remove(manifest_file)
84
84
  self.set_manifest_file(manifest_files)
@@ -237,7 +237,7 @@ class Pypi(PackageManager):
237
237
  install_deptree_command = f"pip install {pipdeptree}"
238
238
  command_list.append(install_deptree_command)
239
239
  uninstall_deptree_command = f"pip uninstall -y {pipdeptree}"
240
- pipdeptree_command = f"{pipdeptree} --local-only --json-tree -e pipdeptree > {self.tmp_deptree_file}"
240
+ pipdeptree_command = f"{pipdeptree} --json-tree -e 'pipdeptree,pip,wheel,setuptools' > {self.tmp_deptree_file}"
241
241
  command_list.append(pipdeptree_command)
242
242
  command_list.append(uninstall_deptree_command)
243
243
  command_list.append(deactivate_command)
@@ -247,8 +247,16 @@ class Pypi(PackageManager):
247
247
  cmd_ret = subprocess.call(command, shell=True)
248
248
  if cmd_ret == 0:
249
249
  self.append_input_package_list_file(self.tmp_file_name)
250
+ with open(self.tmp_file_name, 'r', encoding='utf-8') as json_f:
251
+ json_data = json.load(json_f)
252
+ for d in json_data:
253
+ self.total_dep_list.append(re.sub(r"[-_.]+", "-", d['Name']).lower())
250
254
  if len(pip_license_pkg_list) != 0:
251
255
  self.append_input_package_list_file(self.tmp_pip_license_info_file_name)
256
+ with open(self.tmp_pip_license_info_file_name, 'r', encoding='utf-8') as json_f:
257
+ json_data = json.load(json_f)
258
+ for d in json_data:
259
+ self.total_dep_list.append(re.sub(r"[-_.]+", "-", d['Name']).lower())
252
260
  else:
253
261
  logger.error(f"Failed to run command: {command}")
254
262
  ret = False
@@ -287,7 +295,9 @@ class Pypi(PackageManager):
287
295
 
288
296
  comment_list = []
289
297
  deps_list = []
290
- if self.direct_dep_list:
298
+ if oss_init_name == self.package_name:
299
+ comment_list.append('root package')
300
+ elif self.direct_dep and len(self.direct_dep_list) > 0:
291
301
  if f'{oss_init_name}({oss_version})' in self.direct_dep_list:
292
302
  comment_list.append('direct')
293
303
  else:
@@ -312,12 +322,12 @@ class Pypi(PackageManager):
312
322
  deps = 'dependencies'
313
323
  installed_ver = 'installed_version'
314
324
 
315
- pkg_name = package[package_name]
325
+ pkg_name = re.sub(r"[-_.]+", "-", package[package_name]).lower()
316
326
  pkg_ver = package[installed_ver]
317
327
  dependency_list = package[deps]
318
328
  dependencies[f"{pkg_name}({pkg_ver})"] = []
319
329
  for dependency in dependency_list:
320
- dep_name = dependency[package_name]
330
+ dep_name = re.sub(r"[-_.]+", "-", dependency[package_name]).lower()
321
331
  dep_version = dependency[installed_ver]
322
332
  dependencies[f"{pkg_name}({pkg_ver})"].append(f"{dep_name}({dep_version})")
323
333
  if dependency[deps] != []:
@@ -332,8 +342,20 @@ class Pypi(PackageManager):
332
342
 
333
343
  with open(self.tmp_deptree_file, 'r', encoding='utf8') as f:
334
344
  json_f = json.load(f)
335
- for package in json_f:
336
- self.direct_dep_list.append(f"{package['package_name']}({package['installed_version']})")
345
+ root_package = json_f
346
+ if ('pyproject.toml' in self.manifest_file_name) or ('setup.py' in self.manifest_file_name):
347
+ direct_without_system_package = 0
348
+ for package in root_package:
349
+ package_name = re.sub(r"[-_.]+", "-", package['package_name']).lower()
350
+ if package_name in self.total_dep_list:
351
+ direct_without_system_package += 1
352
+ if direct_without_system_package == 1:
353
+ self.package_name = re.sub(r"[-_.]+", "-", json_f[0]['package_name']).lower()
354
+ root_package = json_f[0]['dependencies']
355
+
356
+ for package in root_package:
357
+ package_name = re.sub(r"[-_.]+", "-", package['package_name']).lower()
358
+ self.direct_dep_list.append(f"{package_name}({package['installed_version']})")
337
359
  if package['dependencies'] == []:
338
360
  continue
339
361
  self.relation_tree = self.get_dependencies(self.relation_tree, package)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-dependency
3
- Version: 3.13.8
3
+ Version: 3.14.0
4
4
  Summary: FOSSLight Dependency Scanner
5
5
  Home-page: https://github.com/fosslight/fosslight_dependency_scanner
6
6
  Author: LG Electronics
@@ -2,32 +2,32 @@ fosslight_dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
2
2
  fosslight_dependency/_analyze_dependency.py,sha256=5fJ-eAkGUVsAo0Eks9l40zyWNBm7HxGQMWD2bAbOWa0,3710
3
3
  fosslight_dependency/_help.py,sha256=gBZfnYF8e4-WQnKa0z6zwXSRUKoIWtQyHbsvjvEFysE,2708
4
4
  fosslight_dependency/_package_manager.py,sha256=BtmwTAPwH38nVMTzaMbewsYYm8xn2spmbJPoIIgYOMQ,12085
5
- fosslight_dependency/constant.py,sha256=v4NisxQwmnhb3e1hIfAvwDr4i_v0euZWo3wcG7U81KM,935
5
+ fosslight_dependency/constant.py,sha256=vj3YI1e1pesUoSW0wp0t9RFHCNjoKJZ6Fv4P8EAl6hU,953
6
6
  fosslight_dependency/run_dependency_scanner.py,sha256=YLCQ_6oI9usfvW0ap4nQDZoornL8LQKpjWyKRnTeY_Y,11275
7
7
  fosslight_dependency/LICENSES/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
8
8
  fosslight_dependency/LICENSES/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
9
9
  fosslight_dependency/package_manager/Android.py,sha256=Up4Fv57kuqddZsD8vy5VRwQW7bNtDbqRatjP8MgzGR8,2849
10
10
  fosslight_dependency/package_manager/Carthage.py,sha256=GtJxBq_3cujbZoQC2KFdFQM4cEjcK_j9bsZaxEaZu6s,6075
11
- fosslight_dependency/package_manager/Cocoapods.py,sha256=vgp3SPcZOwYqGUHVUb5-w93TrQIk7eODhTG6RgqhfCs,8087
11
+ fosslight_dependency/package_manager/Cocoapods.py,sha256=h_W-lknWcqDPDnixSNtJig_h0J-jel6MsIrptUWiTsc,8292
12
12
  fosslight_dependency/package_manager/Go.py,sha256=d3U_hRtcPWEYbT_JVHAB3jEUKLO4FodbF8hMEWS4JFM,5866
13
13
  fosslight_dependency/package_manager/Gradle.py,sha256=SVWjZM5LIVSaANQlU9W0eoDKKsK9UaG8S7Xz7RoAeYQ,4062
14
- fosslight_dependency/package_manager/Helm.py,sha256=Ou_PHQ7V0r6qZz4MH-qvsQA5VXO-Eaipxy64y0bbUnI,3504
14
+ fosslight_dependency/package_manager/Helm.py,sha256=ZXgbtwWNgJKRUikdtFycMIwdJPu4J7vPpVvzgNLk03Q,3925
15
15
  fosslight_dependency/package_manager/Maven.py,sha256=xlQXpm9Ur0DzWa5P9VesJxm-r-mQZ_hoXYWFu7oD1LA,10157
16
- fosslight_dependency/package_manager/Npm.py,sha256=NdBpm5XHbyg148OesWRIY8wMeCGmcFZpVvMtnussQ9E,9935
16
+ fosslight_dependency/package_manager/Npm.py,sha256=0NUBSDBYs15H9lxqaLxh7PgxPI7ewyef8BKtVxeQg14,10495
17
17
  fosslight_dependency/package_manager/Nuget.py,sha256=CzYO548zetC1YNKskUpG1gSWPGF4QrrQz77VZJ5b3Eo,8866
18
18
  fosslight_dependency/package_manager/Pub.py,sha256=zRelrIAeDlLAd8uTUJzYWvLUJeOnzmGPzOx8pcMG55Y,8845
19
- fosslight_dependency/package_manager/Pypi.py,sha256=ussVudgZ1cE53z0CoFwbAVkn_B1LZBxwIgBE71Chm60,13831
19
+ fosslight_dependency/package_manager/Pypi.py,sha256=kNtLhhhpd0QMgMv86KAXclbHPJbcewSp6UefKljAwUA,15321
20
20
  fosslight_dependency/package_manager/Swift.py,sha256=jHWor3dZzunwZt--8rdD42vDq4Z66m9fo5xFnIw5_cQ,6453
21
21
  fosslight_dependency/package_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  fosslight_dependency/third_party/askalono/askalono.exe,sha256=NyngElHbrg3zLFRVwn6fPDZE_EDAEb1N8tiwWoCm4pQ,4743680
23
23
  fosslight_dependency/third_party/askalono/askalono_macos,sha256=cYSNXhAQpkdd8lkgnY5skNeDmU_8DIuP84eFi0OXKkE,5589868
24
24
  fosslight_dependency/third_party/nomos/nomossa,sha256=oFF9I-fhug6AVNyFnWeVXwDRin6NWSvk1g7mHBotB3Q,866408
25
- fosslight_dependency-3.13.8.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
26
- fosslight_dependency-3.13.8.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
- fosslight_dependency-3.13.8.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
28
- fosslight_dependency-3.13.8.dist-info/METADATA,sha256=h_I3I9MuC6bWWwOoETmJTIF1DwITDGNdEXFIVBfvhwc,4603
29
- fosslight_dependency-3.13.8.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
30
- fosslight_dependency-3.13.8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
31
- fosslight_dependency-3.13.8.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
32
- fosslight_dependency-3.13.8.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
33
- fosslight_dependency-3.13.8.dist-info/RECORD,,
25
+ fosslight_dependency-3.14.0.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
26
+ fosslight_dependency-3.14.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ fosslight_dependency-3.14.0.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
28
+ fosslight_dependency-3.14.0.dist-info/METADATA,sha256=jC9CvSTt5IrvxKogfUnTNqk3DXd-OSIMgQyfY-RYjiA,4603
29
+ fosslight_dependency-3.14.0.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
30
+ fosslight_dependency-3.14.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
31
+ fosslight_dependency-3.14.0.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
32
+ fosslight_dependency-3.14.0.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
33
+ fosslight_dependency-3.14.0.dist-info/RECORD,,