fosslight-dependency 3.13.9__py3-none-any.whl → 3.14.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.
Files changed (25) hide show
  1. fosslight_dependency/_package_manager.py +34 -0
  2. fosslight_dependency/constant.py +1 -1
  3. fosslight_dependency/package_manager/Android.py +5 -2
  4. fosslight_dependency/package_manager/Carthage.py +6 -6
  5. fosslight_dependency/package_manager/Cocoapods.py +10 -5
  6. fosslight_dependency/package_manager/Go.py +5 -3
  7. fosslight_dependency/package_manager/Gradle.py +6 -3
  8. fosslight_dependency/package_manager/Helm.py +6 -3
  9. fosslight_dependency/package_manager/Maven.py +5 -3
  10. fosslight_dependency/package_manager/Npm.py +7 -5
  11. fosslight_dependency/package_manager/Nuget.py +5 -3
  12. fosslight_dependency/package_manager/Pub.py +5 -3
  13. fosslight_dependency/package_manager/Pypi.py +51 -26
  14. fosslight_dependency/package_manager/Swift.py +6 -4
  15. fosslight_dependency/run_dependency_scanner.py +27 -5
  16. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/METADATA +3 -2
  17. fosslight_dependency-3.14.1.dist-info/RECORD +33 -0
  18. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/WHEEL +1 -1
  19. fosslight_dependency-3.13.9.dist-info/RECORD +0 -33
  20. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/Apache-2.0.txt +0 -0
  21. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/LICENSE +0 -0
  22. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/LicenseRef-3rd_party_licenses.txt +0 -0
  23. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/MIT.txt +0 -0
  24. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/entry_points.txt +0 -0
  25. {fosslight_dependency-3.13.9.dist-info → fosslight_dependency-3.14.1.dist-info}/top_level.txt +0 -0
@@ -13,6 +13,7 @@ import subprocess
13
13
  import shutil
14
14
  import fosslight_util.constant as constant
15
15
  import fosslight_dependency.constant as const
16
+ from packageurl.contrib import url2purl
16
17
 
17
18
  try:
18
19
  from github import Github
@@ -48,6 +49,7 @@ class PackageManager:
48
49
  self.manifest_file_name = []
49
50
  self.relation_tree = {}
50
51
  self.package_name = ''
52
+ self.purl_dict = {}
51
53
 
52
54
  self.platform = platform.system()
53
55
  self.license_scanner_bin = check_license_scanner(self.platform)
@@ -188,6 +190,38 @@ class PackageManager:
188
190
  logger.warning(f'Fail to parse gradle dependency tree:{e}')
189
191
 
190
192
 
193
+ def get_url_to_purl(url, pkg_manager, oss_name='', oss_version=''):
194
+ purl_prefix = f'pkg:{pkg_manager}'
195
+ purl = str(url2purl.get_purl(url))
196
+ if not re.match(purl_prefix, purl):
197
+ match = re.match(constant.PKG_PATTERN.get(pkg_manager, 'not_support'), url)
198
+ try:
199
+ if match and (match != ''):
200
+ if pkg_manager == 'maven':
201
+ purl = f'{purl_prefix}/{match.group(1)}/{match.group(2)}@{match.group(3)}'
202
+ elif pkg_manager == 'pub':
203
+ purl = f'{purl_prefix}/{match.group(1)}@{match.group(2)}'
204
+ elif pkg_manager == 'cocoapods':
205
+ match = re.match(r'([^\/]+)\/?([^\/]*)', oss_name) # ex, GoogleUtilities/NSData+zlib
206
+ purl = f'{purl_prefix}/{match.group(1)}@{oss_version}'
207
+ if match.group(2):
208
+ purl = f'{purl}#{match.group(2)}'
209
+ elif pkg_manager == 'go':
210
+ purl = f'{purl_prefix}lang/{match.group(1)}@{match.group(2)}'
211
+ else:
212
+ if pkg_manager == 'swift':
213
+ if oss_version:
214
+ purl = f'{purl_prefix}/{oss_name}@{oss_version}'
215
+ else:
216
+ purl = f'{purl_prefix}/{oss_name}'
217
+ elif pkg_manager == 'carthage':
218
+ if oss_version:
219
+ purl = f'{purl}@{oss_version}'
220
+ except Exception:
221
+ logger.debug('Fail to get purl. So use the link purl({purl}).')
222
+ return purl
223
+
224
+
191
225
  def version_refine(oss_version):
192
226
  version_cmp = oss_version.upper()
193
227
 
@@ -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',
@@ -7,7 +7,7 @@ import os
7
7
  import logging
8
8
  import fosslight_util.constant as constant
9
9
  import fosslight_dependency.constant as const
10
- from fosslight_dependency._package_manager import PackageManager
10
+ from fosslight_dependency._package_manager import PackageManager, get_url_to_purl
11
11
 
12
12
  logger = logging.getLogger(constant.LOGGER_NAME)
13
13
 
@@ -49,6 +49,8 @@ class Android(PackageManager):
49
49
  idx, manifest_file, oss_name, oss_version, license_name, dn_loc, homepage = split_str
50
50
  else:
51
51
  continue
52
+ purl = get_url_to_purl(dn_loc, 'maven')
53
+ self.purl_dict[f'{oss_name}({oss_version})'] = purl
52
54
 
53
55
  comment_list = []
54
56
  deps_list = []
@@ -69,6 +71,7 @@ class Android(PackageManager):
69
71
  comment = ','.join(comment_list)
70
72
  deps = ','.join(deps_list)
71
73
 
72
- sheet_list.append([manifest_file, oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
74
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
75
+ '', '', comment, deps])
73
76
 
74
77
  return sheet_list
@@ -9,9 +9,8 @@ import os
9
9
  import fosslight_util.constant as constant
10
10
  import fosslight_dependency.constant as const
11
11
  from fosslight_dependency._package_manager import PackageManager
12
- from fosslight_dependency._package_manager import connect_github
13
- from fosslight_dependency._package_manager import get_github_license
14
- from fosslight_dependency._package_manager import check_and_run_license_scanner
12
+ from fosslight_dependency._package_manager import connect_github, get_github_license, check_and_run_license_scanner
13
+ from fosslight_dependency._package_manager import get_url_to_purl
15
14
 
16
15
  logger = logging.getLogger(constant.LOGGER_NAME)
17
16
 
@@ -60,9 +59,10 @@ class Carthage(PackageManager):
60
59
  else:
61
60
  homepage = oss_path
62
61
  dn_loc = homepage
63
-
64
62
  oss_version = re_result[0][2]
65
63
 
64
+ purl = get_url_to_purl(homepage, self.package_manager_name, oss_origin_name, oss_version)
65
+
66
66
  license_name = ''
67
67
  find_license = False
68
68
  if oss_origin_name in checkout_dir_list:
@@ -96,8 +96,8 @@ class Carthage(PackageManager):
96
96
  else:
97
97
  comment = 'transitive'
98
98
 
99
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
100
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, ''])
99
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
100
+ '', '', comment, ''])
101
101
 
102
102
  except Exception as e:
103
103
  logger.warning(f"Failed to parse oss information: {e}")
@@ -10,7 +10,7 @@ import yaml
10
10
  import re
11
11
  import fosslight_util.constant as constant
12
12
  import fosslight_dependency.constant as const
13
- from fosslight_dependency._package_manager import PackageManager
13
+ from fosslight_dependency._package_manager import PackageManager, get_url_to_purl
14
14
 
15
15
  logger = logging.getLogger(constant.LOGGER_NAME)
16
16
 
@@ -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,14 +128,17 @@ 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
+ purl = get_url_to_purl(homepage, self.package_manager_name, pod_oss_name_origin, oss_version)
132
+ self.purl_dict[f'{pod_oss_name_origin}({oss_version})'] = purl
133
+ if pod_oss_name in external_source_list:
134
+ homepage = dn_loc
129
135
  if oss_name == '':
130
136
  continue
131
137
  if pod_oss_version != oss_version:
132
138
  logger.warning(f'{pod_oss_name_origin} has different version({pod_oss_version})\
133
139
  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}',
136
- pod_oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
140
+ sheet_list.append([purl, oss_name_report, pod_oss_version, license_name, dn_loc, homepage,
141
+ '', '', comment, deps])
137
142
  except Exception as e:
138
143
  logger.warning(f"Fail to get {pod_oss_name_origin}:{e}")
139
144
 
@@ -12,7 +12,7 @@ import urllib.request
12
12
  import re
13
13
  import fosslight_util.constant as constant
14
14
  import fosslight_dependency.constant as const
15
- from fosslight_dependency._package_manager import PackageManager
15
+ from fosslight_dependency._package_manager import PackageManager, get_url_to_purl
16
16
 
17
17
  logger = logging.getLogger(constant.LOGGER_NAME)
18
18
 
@@ -107,6 +107,8 @@ class Go(PackageManager):
107
107
 
108
108
  homepage_set = []
109
109
  homepage = self.dn_url + package_path
110
+ purl = get_url_to_purl(f"{homepage}@{oss_version}", self.package_manager_name)
111
+ self.purl_dict[f'{package_path}({oss_version})'] = purl
110
112
 
111
113
  if oss_origin_version:
112
114
  tmp_homepage = f"{homepage}@{oss_origin_version}"
@@ -148,7 +150,7 @@ class Go(PackageManager):
148
150
 
149
151
  comment = ','.join(comment_list)
150
152
  deps = ','.join(deps_list)
151
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
152
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
153
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
154
+ '', '', comment, deps])
153
155
 
154
156
  return sheet_list
@@ -9,7 +9,7 @@ import json
9
9
  import fosslight_util.constant as constant
10
10
  import fosslight_dependency.constant as const
11
11
  from fosslight_dependency._package_manager import PackageManager
12
- from fosslight_dependency._package_manager import version_refine
12
+ from fosslight_dependency._package_manager import version_refine, get_url_to_purl
13
13
 
14
14
  logger = logging.getLogger(constant.LOGGER_NAME)
15
15
 
@@ -59,6 +59,7 @@ class Gradle(PackageManager):
59
59
  oss_version = version_refine(oss_ini_version)
60
60
 
61
61
  license_names = []
62
+ purl = ''
62
63
  try:
63
64
  for licenses in d['licenses']:
64
65
  if licenses['name'] != '':
@@ -73,6 +74,8 @@ class Gradle(PackageManager):
73
74
  else:
74
75
  dn_loc = f"{self.dn_url}{group_id}/{artifact_id}/{oss_ini_version}"
75
76
  homepage = f"{self.dn_url}{group_id}/{artifact_id}"
77
+ purl = get_url_to_purl(dn_loc, 'maven')
78
+ self.purl_dict[f'{oss_name}({oss_ini_version})'] = purl
76
79
 
77
80
  comment_list = []
78
81
  deps_list = []
@@ -90,8 +93,8 @@ class Gradle(PackageManager):
90
93
  comment = ','.join(comment_list)
91
94
  deps = ','.join(deps_list)
92
95
 
93
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
94
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
96
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
97
+ '', '', comment, deps])
95
98
 
96
99
  return sheet_list
97
100
 
@@ -10,7 +10,7 @@ import yaml
10
10
  import shutil
11
11
  import fosslight_util.constant as constant
12
12
  import fosslight_dependency.constant as const
13
- from fosslight_dependency._package_manager import PackageManager
13
+ from fosslight_dependency._package_manager import PackageManager, get_url_to_purl
14
14
  from fosslight_util.download import extract_compressed_dir
15
15
 
16
16
  logger = logging.getLogger(constant.LOGGER_NAME)
@@ -73,6 +73,7 @@ class Helm(PackageManager):
73
73
  for dep in dep_item_list:
74
74
  try:
75
75
  f_path = os.path.join(self.tmp_charts_dir, dep, f_name)
76
+ purl = ''
76
77
  with open(f_path, 'r', encoding='utf8') as yaml_fp:
77
78
  yaml_f = yaml.safe_load(yaml_fp)
78
79
  oss_name = f'{self.package_manager_name}:{yaml_f["name"]}'
@@ -85,6 +86,8 @@ class Helm(PackageManager):
85
86
  if yaml_f.get('sources', '') != '':
86
87
  dn_loc = yaml_f.get('sources', '')[0]
87
88
 
89
+ purl = get_url_to_purl(dn_loc if dn_loc else homepage, self.package_manager_name)
90
+
88
91
  license_name = ''
89
92
  if yaml_f.get('annotations', '') != '':
90
93
  license_name = yaml_f['annotations'].get('licenses', '')
@@ -96,7 +99,7 @@ class Helm(PackageManager):
96
99
  logging.warning(f"Fail to parse chart info {dep}: {e}")
97
100
  continue
98
101
 
99
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
100
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, ''])
102
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
103
+ '', '', comment, ''])
101
104
 
102
105
  return sheet_list
@@ -13,7 +13,7 @@ import re
13
13
  import fosslight_util.constant as constant
14
14
  import fosslight_dependency.constant as const
15
15
  from fosslight_dependency._package_manager import PackageManager
16
- from fosslight_dependency._package_manager import version_refine
16
+ from fosslight_dependency._package_manager import version_refine, get_url_to_purl
17
17
 
18
18
  logger = logging.getLogger(constant.LOGGER_NAME)
19
19
 
@@ -225,6 +225,8 @@ class Maven(PackageManager):
225
225
  oss_name = f"{groupid}:{artifactid}"
226
226
  dn_loc = f"{self.dn_url}{groupid}/{artifactid}/{version}"
227
227
  homepage = f"{self.dn_url}{groupid}/{artifactid}"
228
+ purl = get_url_to_purl(dn_loc, self.package_manager_name)
229
+ self.purl_dict[f'{oss_name}({oss_version})'] = purl
228
230
 
229
231
  licenses = d.find("licenses")
230
232
  if len(licenses):
@@ -253,7 +255,7 @@ class Maven(PackageManager):
253
255
  comment = ','.join(comment_list)
254
256
  deps = ','.join(deps_list)
255
257
 
256
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
257
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
258
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
259
+ '', '', comment, deps])
258
260
 
259
261
  return sheet_list
@@ -11,7 +11,7 @@ import shutil
11
11
  import re
12
12
  import fosslight_util.constant as constant
13
13
  import fosslight_dependency.constant as const
14
- from fosslight_dependency._package_manager import PackageManager
14
+ from fosslight_dependency._package_manager import PackageManager, get_url_to_purl
15
15
 
16
16
  logger = logging.getLogger(constant.LOGGER_NAME)
17
17
  node_modules = 'node_modules'
@@ -176,6 +176,8 @@ class Npm(PackageManager):
176
176
 
177
177
  homepage = self.dn_url + oss_init_name
178
178
  dn_loc = f"{self.dn_url}{oss_init_name}/v/{oss_version}"
179
+ purl = get_url_to_purl(dn_loc, self.package_manager_name)
180
+ self.purl_dict[f'{oss_init_name}({oss_version})'] = purl
179
181
  if d[_repository]:
180
182
  dn_loc = d[_repository]
181
183
  elif private_pkg:
@@ -205,13 +207,13 @@ class Npm(PackageManager):
205
207
  deps = ','.join(deps_list)
206
208
  if multi_flag:
207
209
  comment = f'{comment}, {license_comment}'
208
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
209
- oss_name, oss_version, multi_license, dn_loc, homepage, '', '', comment, deps])
210
+ sheet_list.append([purl, oss_name, oss_version, multi_license, dn_loc, homepage,
211
+ '', '', comment, deps])
210
212
  else:
211
213
  license_name = license_name.replace(",", "")
212
214
  license_name = check_unknown_license(license_name, manifest_file_path)
213
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
214
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
215
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
216
+ '', '', comment, deps])
215
217
 
216
218
  return sheet_list
217
219
 
@@ -12,7 +12,7 @@ import requests
12
12
  import fosslight_util.constant as constant
13
13
  import fosslight_dependency.constant as const
14
14
  from fosslight_dependency._package_manager import PackageManager
15
- from fosslight_dependency._package_manager import check_and_run_license_scanner
15
+ from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
16
16
 
17
17
  logger = logging.getLogger(constant.LOGGER_NAME)
18
18
 
@@ -95,8 +95,11 @@ class Nuget(PackageManager):
95
95
  else:
96
96
  if dn_loc.endswith('.git'):
97
97
  dn_loc = dn_loc[:-4]
98
+ purl = get_url_to_purl(f'{homepage}/{oss_version}', self.package_manager_name)
98
99
  else:
99
100
  comment_list.append('Fail to response for nuget api')
101
+ purl = f'pkg:nuget/{oss_origin_name}@{oss_version}'
102
+ self.purl_dict[f'{oss_origin_name}({oss_version})'] = purl
100
103
 
101
104
  deps_list = []
102
105
  if self.direct_dep and self.packageReference:
@@ -112,8 +115,7 @@ class Nuget(PackageManager):
112
115
 
113
116
  comment = ','.join(comment_list)
114
117
  deps = ','.join(deps_list)
115
- sheet_list.append([','.join(self.input_package_list_file),
116
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
118
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
117
119
 
118
120
  except Exception as e:
119
121
  logger.warning(f"Failed to parse oss information: {e}")
@@ -13,7 +13,7 @@ import subprocess
13
13
  import fosslight_util.constant as constant
14
14
  import fosslight_dependency.constant as const
15
15
  from fosslight_dependency._package_manager import PackageManager
16
- from fosslight_dependency._package_manager import check_and_run_license_scanner
16
+ from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
17
17
 
18
18
  logger = logging.getLogger(constant.LOGGER_NAME)
19
19
 
@@ -124,6 +124,8 @@ class Pub(PackageManager):
124
124
  if homepage is None:
125
125
  homepage = ''
126
126
  dn_loc = f"{self.dn_url}{oss_origin_name}/versions/{oss_version}"
127
+ purl = get_url_to_purl(dn_loc, self.package_manager_name)
128
+ self.purl_dict[f'{oss_origin_name}({oss_version})'] = purl
127
129
  license_txt = json_data['license']
128
130
 
129
131
  tmp_license_txt = open(tmp_license_txt_file_name, 'w', encoding='utf-8')
@@ -158,8 +160,8 @@ class Pub(PackageManager):
158
160
  deps_list.extend(rel_items)
159
161
  comment = ','.join(comment_list)
160
162
  deps = ','.join(deps_list)
161
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
162
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
163
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
164
+ '', '', comment, deps])
163
165
  except Exception as e:
164
166
  logger.error(f"Fail to parse pub oss information: {e}")
165
167
 
@@ -13,7 +13,7 @@ import re
13
13
  import fosslight_util.constant as constant
14
14
  import fosslight_dependency.constant as const
15
15
  from fosslight_dependency._package_manager import PackageManager
16
- from fosslight_dependency._package_manager import check_and_run_license_scanner
16
+ from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
17
17
 
18
18
  logger = logging.getLogger(constant.LOGGER_NAME)
19
19
 
@@ -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)
@@ -90,7 +90,7 @@ class Pypi(PackageManager):
90
90
  activate_cmd = os.path.join(self.venv_tmp_dir, "Scripts", "activate.bat")
91
91
  cmd_separator = "&"
92
92
  else:
93
- create_venv_cmd = f"virtualenv -p python3 {self.venv_tmp_dir}"
93
+ create_venv_cmd = f"python3 -m venv {self.venv_tmp_dir}"
94
94
  activate_cmd = ". " + os.path.join(venv_path, "bin", "activate")
95
95
  cmd_separator = ";"
96
96
 
@@ -139,6 +139,7 @@ class Pypi(PackageManager):
139
139
  pip_licenses_default_options = ' --from=mixed --with-url --format=json --with-license-file'
140
140
  pip_licenses_system_option = ' --with-system -p '
141
141
  tmp_pip_list = "tmp_list.txt"
142
+ python_cmd = "python -m"
142
143
 
143
144
  if self.pip_activate_cmd.startswith("source "):
144
145
  tmp_activate = self.pip_activate_cmd[7:]
@@ -156,7 +157,7 @@ class Pypi(PackageManager):
156
157
  command_separator = ";"
157
158
 
158
159
  activate_command = pip_activate_cmd
159
- pip_list_command = f"pip freeze > {tmp_pip_list}"
160
+ pip_list_command = f"{python_cmd} pip freeze > {tmp_pip_list}"
160
161
  deactivate_command = self.pip_deactivate_cmd
161
162
 
162
163
  command_list = [activate_command, pip_list_command, deactivate_command]
@@ -215,29 +216,29 @@ class Pypi(PackageManager):
215
216
  command_list = []
216
217
  command_list.append(activate_command)
217
218
  if not exists_pip_licenses:
218
- install_pip_command = f"pip install {pip_licenses}"
219
+ install_pip_command = f"{python_cmd} pip install {pip_licenses}"
219
220
  command_list.append(install_pip_command)
220
221
 
221
222
  pip_licenses_command = f"{pip_licenses}{pip_licenses_default_options} > {self.tmp_file_name}"
222
223
  command_list.append(pip_licenses_command)
223
224
 
224
225
  if len(pip_license_pkg_list) != 0:
225
- pip_licenses_info_command = pip_licenses + pip_licenses_default_options + pip_licenses_system_option
226
+ pip_licenses_info_command = f"{pip_licenses}{pip_licenses_default_options}{pip_licenses_system_option}"
226
227
  pip_licenses_info_command += " ".join(pip_license_pkg_list)
227
228
 
228
229
  pip_licenses_info_command += f" > {self.tmp_pip_license_info_file_name}"
229
230
  command_list.append(pip_licenses_info_command)
230
231
 
231
232
  if len(uninstall_pkg_list) > 0:
232
- uninstall_pip_command = "pip uninstall -y "
233
+ uninstall_pip_command = f"{python_cmd} pip uninstall -y "
233
234
  uninstall_pip_command += ' '.join(uninstall_pkg_list)
234
235
  command_list.append(uninstall_pip_command)
235
236
 
236
237
  if not exists_pipdeptree:
237
- install_deptree_command = f"pip install {pipdeptree}"
238
+ install_deptree_command = f"{python_cmd} pip install {pipdeptree}"
238
239
  command_list.append(install_deptree_command)
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
+ uninstall_deptree_command = f"{python_cmd} pip uninstall -y {pipdeptree}"
241
+ pipdeptree_command = f"{pipdeptree} --json-tree -e 'pipdeptree,pip,wheel,setuptools' > {self.tmp_deptree_file}"
241
242
  command_list.append(pipdeptree_command)
242
243
  command_list.append(uninstall_deptree_command)
243
244
  command_list.append(deactivate_command)
@@ -247,8 +248,16 @@ class Pypi(PackageManager):
247
248
  cmd_ret = subprocess.call(command, shell=True)
248
249
  if cmd_ret == 0:
249
250
  self.append_input_package_list_file(self.tmp_file_name)
251
+ with open(self.tmp_file_name, 'r', encoding='utf-8') as json_f:
252
+ json_data = json.load(json_f)
253
+ for d in json_data:
254
+ self.total_dep_list.append(re.sub(r"[-_.]+", "-", d['Name']).lower())
250
255
  if len(pip_license_pkg_list) != 0:
251
256
  self.append_input_package_list_file(self.tmp_pip_license_info_file_name)
257
+ with open(self.tmp_pip_license_info_file_name, 'r', encoding='utf-8') as json_f:
258
+ json_data = json.load(json_f)
259
+ for d in json_data:
260
+ self.total_dep_list.append(re.sub(r"[-_.]+", "-", d['Name']).lower())
252
261
  else:
253
262
  logger.error(f"Failed to run command: {command}")
254
263
  ret = False
@@ -274,7 +283,8 @@ class Pypi(PackageManager):
274
283
  homepage = check_UNKNOWN(d['URL'])
275
284
  oss_version = d['Version']
276
285
  dn_loc = f"{self.dn_url}{oss_init_name}/{oss_version}"
277
-
286
+ purl = get_url_to_purl(dn_loc, self.package_manager_name)
287
+ self.purl_dict[f'{oss_init_name}({oss_version})'] = purl
278
288
  if license_name is not None:
279
289
  license_name = license_name.replace(';', ',')
280
290
  else:
@@ -287,7 +297,9 @@ class Pypi(PackageManager):
287
297
 
288
298
  comment_list = []
289
299
  deps_list = []
290
- if self.direct_dep_list:
300
+ if oss_init_name == self.package_name:
301
+ comment_list.append('root package')
302
+ elif self.direct_dep and len(self.direct_dep_list) > 0:
291
303
  if f'{oss_init_name}({oss_version})' in self.direct_dep_list:
292
304
  comment_list.append('direct')
293
305
  else:
@@ -298,8 +310,7 @@ class Pypi(PackageManager):
298
310
  deps_list.extend(rel_items)
299
311
  comment = ','.join(comment_list)
300
312
  deps = ','.join(deps_list)
301
- sheet_list.append([', '.join(self.manifest_file_name),
302
- oss_name, oss_version,
313
+ sheet_list.append([purl, oss_name, oss_version,
303
314
  license_name, dn_loc, homepage, '', '', comment, deps])
304
315
 
305
316
  except Exception as ex:
@@ -312,12 +323,12 @@ class Pypi(PackageManager):
312
323
  deps = 'dependencies'
313
324
  installed_ver = 'installed_version'
314
325
 
315
- pkg_name = package[package_name]
326
+ pkg_name = re.sub(r"[-_.]+", "-", package[package_name]).lower()
316
327
  pkg_ver = package[installed_ver]
317
328
  dependency_list = package[deps]
318
329
  dependencies[f"{pkg_name}({pkg_ver})"] = []
319
330
  for dependency in dependency_list:
320
- dep_name = dependency[package_name]
331
+ dep_name = re.sub(r"[-_.]+", "-", dependency[package_name]).lower()
321
332
  dep_version = dependency[installed_ver]
322
333
  dependencies[f"{pkg_name}({pkg_ver})"].append(f"{dep_name}({dep_version})")
323
334
  if dependency[deps] != []:
@@ -329,14 +340,28 @@ class Pypi(PackageManager):
329
340
  if not os.path.exists(self.tmp_deptree_file):
330
341
  self.direct_dep = False
331
342
  return
332
-
333
- with open(self.tmp_deptree_file, 'r', encoding='utf8') as f:
334
- json_f = json.load(f)
335
- for package in json_f:
336
- self.direct_dep_list.append(f"{package['package_name']}({package['installed_version']})")
337
- if package['dependencies'] == []:
338
- continue
339
- self.relation_tree = self.get_dependencies(self.relation_tree, package)
343
+ try:
344
+ with open(self.tmp_deptree_file, 'r', encoding='utf8') as f:
345
+ json_f = json.load(f)
346
+ root_package = json_f
347
+ if ('pyproject.toml' in self.manifest_file_name) or ('setup.py' in self.manifest_file_name):
348
+ direct_without_system_package = 0
349
+ for package in root_package:
350
+ package_name = re.sub(r"[-_.]+", "-", package['package_name']).lower()
351
+ if package_name in self.total_dep_list:
352
+ direct_without_system_package += 1
353
+ if direct_without_system_package == 1:
354
+ self.package_name = re.sub(r"[-_.]+", "-", json_f[0]['package_name']).lower()
355
+ root_package = json_f[0]['dependencies']
356
+
357
+ for package in root_package:
358
+ package_name = re.sub(r"[-_.]+", "-", package['package_name']).lower()
359
+ self.direct_dep_list.append(f"{package_name}({package['installed_version']})")
360
+ if package['dependencies'] == []:
361
+ continue
362
+ self.relation_tree = self.get_dependencies(self.relation_tree, package)
363
+ except Exception as e:
364
+ logger.warning(f'Fail to parse direct dependency: {e}')
340
365
 
341
366
 
342
367
  def check_UNKNOWN(text):
@@ -10,8 +10,8 @@ import subprocess
10
10
  import fosslight_util.constant as constant
11
11
  import fosslight_dependency.constant as const
12
12
  from fosslight_dependency._package_manager import PackageManager
13
- from fosslight_dependency._package_manager import connect_github
14
- from fosslight_dependency._package_manager import get_github_license
13
+ from fosslight_dependency._package_manager import connect_github, get_github_license
14
+ from fosslight_dependency._package_manager import get_url_to_purl
15
15
 
16
16
  logger = logging.getLogger(constant.LOGGER_NAME)
17
17
 
@@ -134,6 +134,8 @@ class Swift(PackageManager):
134
134
  license_name = ''
135
135
 
136
136
  github_repo = "/".join(homepage.split('/')[-2:])
137
+ purl = get_url_to_purl(dn_loc, self.package_manager_name, github_repo, oss_version)
138
+ self.purl_dict[f'{oss_origin_name}({oss_version})'] = purl
137
139
  license_name = get_github_license(g, github_repo, self.platform, self.license_scanner_bin)
138
140
 
139
141
  comment_list = []
@@ -150,7 +152,7 @@ class Swift(PackageManager):
150
152
  deps_list.extend(rel_items)
151
153
  comment = ','.join(comment_list)
152
154
  deps = ','.join(deps_list)
153
- sheet_list.append([const.SUPPORT_PACKAE.get(self.package_manager_name),
154
- oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps])
155
+ sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
156
+ '', '', comment, deps])
155
157
 
156
158
  return sheet_list
@@ -20,16 +20,17 @@ from fosslight_dependency._analyze_dependency import analyze_dependency
20
20
  from fosslight_util.output_format import check_output_format, write_output_file
21
21
  if platform.system() != 'Windows':
22
22
  from fosslight_util.write_spdx import write_spdx
23
+ from fosslight_util.cover import CoverItem
23
24
 
24
25
  # Package Name
25
26
  _PKG_NAME = "fosslight_dependency"
26
27
  logger = logging.getLogger(constant.LOGGER_NAME)
27
28
  warnings.filterwarnings("ignore", category=FutureWarning)
28
29
  _sheet_name = "DEP_FL_Dependency"
29
- EXTENDED_HEADER = {_sheet_name: ['ID', 'Source Name or Path', 'OSS Name',
30
+ EXTENDED_HEADER = {_sheet_name: ['ID', 'purl', 'OSS Name',
30
31
  'OSS Version', 'License', 'Download Location',
31
32
  'Homepage', 'Copyright Text', 'Exclude',
32
- 'Comment', 'Dependencies']}
33
+ 'Comment', 'Depends On']}
33
34
  CUSTOMIZED_FORMAT = {'excel': '.xlsx', 'csv': '.csv', 'opossum': '.json', 'yaml': '.yaml',
34
35
  'spdx-yaml': '.yaml', 'spdx-json': '.json', 'spdx-xml': '.xml',
35
36
  'spdx-tag': '.tag'}
@@ -158,21 +159,40 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
158
159
  finally:
159
160
  if not ret:
160
161
  logger.warning("Dependency scanning terminated because the package manager was not found.")
161
- return False, sheet_list
162
+ ret = False
162
163
  else:
163
164
  found_package_manager[package_manager] = ''
164
165
 
165
166
  pass_key = 'PASS'
167
+ success_pm = []
168
+ fail_pm = []
166
169
  for pm, manifest_file_name in found_package_manager.items():
167
170
  if manifest_file_name == pass_key:
168
171
  continue
169
172
  ret, package_sheet_list = analyze_dependency(pm, input_dir, output_path, pip_activate_cmd, pip_deactivate_cmd,
170
173
  output_custom_dir, app_name, github_token, manifest_file_name, direct)
171
174
  if ret:
175
+ success_pm.append(f"{pm} ({', '.join(manifest_file_name)})")
172
176
  sheet_list[_sheet_name].extend(package_sheet_list)
173
177
  if pm == const.GRADLE:
174
178
  if const.ANDROID in found_package_manager.keys():
175
179
  found_package_manager[const.ANDROID] = pass_key
180
+ else:
181
+ fail_pm.append(f"{pm} ({', '.join(manifest_file_name)})")
182
+ cover = CoverItem(tool_name=_PKG_NAME,
183
+ start_time=_start_time,
184
+ input_path=input_dir)
185
+ cover_comment_arr = []
186
+ if len(found_package_manager.keys()) > 0:
187
+ if len(success_pm) > 0:
188
+ cover_comment_arr.append(f"Analyzed Package manager: {', '.join(success_pm)}")
189
+ if len(fail_pm) > 0:
190
+ info_msg = 'Check https://fosslight.org/fosslight-guide-en/scanner/3_dependency.html#-prerequisite.'
191
+ cover_comment_arr.append(f"Analysis failed Package manager: {', '.join(fail_pm)} ({info_msg})")
192
+ else:
193
+ cover_comment_arr.append("No Package manager detected.")
194
+
195
+ cover.comment = ' / '.join(cover_comment_arr)
176
196
 
177
197
  output_file_without_ext = os.path.join(output_path, output_file)
178
198
  if format.startswith('spdx'):
@@ -184,12 +204,14 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
184
204
  logger.error('Windows not support spdx format.')
185
205
  else:
186
206
  success_write, err_msg, result_file = write_output_file(output_file_without_ext, output_extension,
187
- sheet_list, EXTENDED_HEADER)
207
+ sheet_list, EXTENDED_HEADER, '', cover)
188
208
  if success_write:
189
209
  if result_file:
190
- logger.info(f"Writing Output file({result_file}), success:{success_write}")
210
+ logger.info(f"Output file: {result_file}")
191
211
  else:
192
212
  logger.warning(f"{err_msg}")
213
+ for i in cover_comment_arr:
214
+ logger.info(i.strip())
193
215
  else:
194
216
  ret = False
195
217
  logger.error(f"Fail to generate result file. msg:({err_msg})")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-dependency
3
- Version: 3.13.9
3
+ Version: 3.14.1
4
4
  Summary: FOSSLight Dependency Scanner
5
5
  Home-page: https://github.com/fosslight/fosslight_dependency_scanner
6
6
  Author: LG Electronics
@@ -20,10 +20,11 @@ Requires-Dist: lxml
20
20
  Requires-Dist: virtualenv
21
21
  Requires-Dist: pyyaml
22
22
  Requires-Dist: lastversion
23
- Requires-Dist: fosslight-util >=1.4.29
23
+ Requires-Dist: fosslight-util >=1.4.40
24
24
  Requires-Dist: PyGithub
25
25
  Requires-Dist: requirements-parser
26
26
  Requires-Dist: defusedxml
27
+ Requires-Dist: packageurl-python
27
28
 
28
29
  <!--
29
30
  Copyright (c) 2021 LG Electronics
@@ -0,0 +1,33 @@
1
+ fosslight_dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ fosslight_dependency/_analyze_dependency.py,sha256=5fJ-eAkGUVsAo0Eks9l40zyWNBm7HxGQMWD2bAbOWa0,3710
3
+ fosslight_dependency/_help.py,sha256=gBZfnYF8e4-WQnKa0z6zwXSRUKoIWtQyHbsvjvEFysE,2708
4
+ fosslight_dependency/_package_manager.py,sha256=6U6V413HSZAChX64v3CfXBd6jyIkuaIW60pBfbCLSfQ,13700
5
+ fosslight_dependency/constant.py,sha256=vj3YI1e1pesUoSW0wp0t9RFHCNjoKJZ6Fv4P8EAl6hU,953
6
+ fosslight_dependency/run_dependency_scanner.py,sha256=S8PQMSdSvg6QaAtY1uuQ6a0apuwdeU3jU6RdBiz2PvU,12236
7
+ fosslight_dependency/LICENSES/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
8
+ fosslight_dependency/LICENSES/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
9
+ fosslight_dependency/package_manager/Android.py,sha256=lPL-B-qIr4Bg1Z-bT6hSwzYF0IqW3J32At8AJNg8P_w,3015
10
+ fosslight_dependency/package_manager/Carthage.py,sha256=OZL0ssKvN6pze0VohZ-kMeM-g-V7f5VqumpEh3o3t-U,6106
11
+ fosslight_dependency/package_manager/Cocoapods.py,sha256=X6UYX0-Tdfy_hkM0l5M54WHbhZNLLpFDzrGxeBjTmcY,8450
12
+ fosslight_dependency/package_manager/Go.py,sha256=Ur7kH_alqV2o2t6Q5oP2UqmqfzdZ6l9yPuglTEOYrHU,6003
13
+ fosslight_dependency/package_manager/Gradle.py,sha256=_gZjdmNDXdUEumVwwesbaCeJI5T90xzkwZy1ACFHeR8,4182
14
+ fosslight_dependency/package_manager/Helm.py,sha256=FjzQilY3GJyX8thwMGY_Rr12kw-dbehxVk6jIJNb2-M,4024
15
+ fosslight_dependency/package_manager/Maven.py,sha256=VlIc785CrFN3RBXHy80JSx2J5AlrbXhg5cquZA-qoLw,10261
16
+ fosslight_dependency/package_manager/Npm.py,sha256=7gj-JrQKWRQUdWM-ly3HcIy1ioKny8jaeNohdBk7rfE,10557
17
+ fosslight_dependency/package_manager/Nuget.py,sha256=1YGkGktShw6xj7NGvgL763jWsnN58JEX9szTggjU1EQ,9061
18
+ fosslight_dependency/package_manager/Pub.py,sha256=u2Wsm8raxc8fYEchyUpSpiKi-1x8seE4f0zJHD8BrMI,8964
19
+ fosslight_dependency/package_manager/Pypi.py,sha256=QakFlbGrb3oOXwRj498x5k2GFS1SgNeMpgMwUpBcwWU,15698
20
+ fosslight_dependency/package_manager/Swift.py,sha256=9J-LDCn0_zDBuScUeCgZIq0BQcx4n_1fhshciF9byNE,6590
21
+ fosslight_dependency/package_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ fosslight_dependency/third_party/askalono/askalono.exe,sha256=NyngElHbrg3zLFRVwn6fPDZE_EDAEb1N8tiwWoCm4pQ,4743680
23
+ fosslight_dependency/third_party/askalono/askalono_macos,sha256=cYSNXhAQpkdd8lkgnY5skNeDmU_8DIuP84eFi0OXKkE,5589868
24
+ fosslight_dependency/third_party/nomos/nomossa,sha256=oFF9I-fhug6AVNyFnWeVXwDRin6NWSvk1g7mHBotB3Q,866408
25
+ fosslight_dependency-3.14.1.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
26
+ fosslight_dependency-3.14.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ fosslight_dependency-3.14.1.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
28
+ fosslight_dependency-3.14.1.dist-info/METADATA,sha256=MZk20jKRlLdfSLg3MGLqcxcWkinMHdJVJGqPc1_Z9F4,4636
29
+ fosslight_dependency-3.14.1.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
30
+ fosslight_dependency-3.14.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
31
+ fosslight_dependency-3.14.1.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
32
+ fosslight_dependency-3.14.1.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
33
+ fosslight_dependency-3.14.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,33 +0,0 @@
1
- fosslight_dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- fosslight_dependency/_analyze_dependency.py,sha256=5fJ-eAkGUVsAo0Eks9l40zyWNBm7HxGQMWD2bAbOWa0,3710
3
- fosslight_dependency/_help.py,sha256=gBZfnYF8e4-WQnKa0z6zwXSRUKoIWtQyHbsvjvEFysE,2708
4
- fosslight_dependency/_package_manager.py,sha256=BtmwTAPwH38nVMTzaMbewsYYm8xn2spmbJPoIIgYOMQ,12085
5
- fosslight_dependency/constant.py,sha256=v4NisxQwmnhb3e1hIfAvwDr4i_v0euZWo3wcG7U81KM,935
6
- fosslight_dependency/run_dependency_scanner.py,sha256=YLCQ_6oI9usfvW0ap4nQDZoornL8LQKpjWyKRnTeY_Y,11275
7
- fosslight_dependency/LICENSES/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
8
- fosslight_dependency/LICENSES/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
9
- fosslight_dependency/package_manager/Android.py,sha256=Up4Fv57kuqddZsD8vy5VRwQW7bNtDbqRatjP8MgzGR8,2849
10
- fosslight_dependency/package_manager/Carthage.py,sha256=GtJxBq_3cujbZoQC2KFdFQM4cEjcK_j9bsZaxEaZu6s,6075
11
- fosslight_dependency/package_manager/Cocoapods.py,sha256=vgp3SPcZOwYqGUHVUb5-w93TrQIk7eODhTG6RgqhfCs,8087
12
- fosslight_dependency/package_manager/Go.py,sha256=d3U_hRtcPWEYbT_JVHAB3jEUKLO4FodbF8hMEWS4JFM,5866
13
- fosslight_dependency/package_manager/Gradle.py,sha256=SVWjZM5LIVSaANQlU9W0eoDKKsK9UaG8S7Xz7RoAeYQ,4062
14
- fosslight_dependency/package_manager/Helm.py,sha256=ZXgbtwWNgJKRUikdtFycMIwdJPu4J7vPpVvzgNLk03Q,3925
15
- fosslight_dependency/package_manager/Maven.py,sha256=xlQXpm9Ur0DzWa5P9VesJxm-r-mQZ_hoXYWFu7oD1LA,10157
16
- fosslight_dependency/package_manager/Npm.py,sha256=0NUBSDBYs15H9lxqaLxh7PgxPI7ewyef8BKtVxeQg14,10495
17
- fosslight_dependency/package_manager/Nuget.py,sha256=CzYO548zetC1YNKskUpG1gSWPGF4QrrQz77VZJ5b3Eo,8866
18
- fosslight_dependency/package_manager/Pub.py,sha256=zRelrIAeDlLAd8uTUJzYWvLUJeOnzmGPzOx8pcMG55Y,8845
19
- fosslight_dependency/package_manager/Pypi.py,sha256=ussVudgZ1cE53z0CoFwbAVkn_B1LZBxwIgBE71Chm60,13831
20
- fosslight_dependency/package_manager/Swift.py,sha256=jHWor3dZzunwZt--8rdD42vDq4Z66m9fo5xFnIw5_cQ,6453
21
- fosslight_dependency/package_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- fosslight_dependency/third_party/askalono/askalono.exe,sha256=NyngElHbrg3zLFRVwn6fPDZE_EDAEb1N8tiwWoCm4pQ,4743680
23
- fosslight_dependency/third_party/askalono/askalono_macos,sha256=cYSNXhAQpkdd8lkgnY5skNeDmU_8DIuP84eFi0OXKkE,5589868
24
- fosslight_dependency/third_party/nomos/nomossa,sha256=oFF9I-fhug6AVNyFnWeVXwDRin6NWSvk1g7mHBotB3Q,866408
25
- fosslight_dependency-3.13.9.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
26
- fosslight_dependency-3.13.9.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
- fosslight_dependency-3.13.9.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
28
- fosslight_dependency-3.13.9.dist-info/METADATA,sha256=Icw4wIrxEhpM_B-URmicp49Epme4uihsFAmJIaH0r-E,4603
29
- fosslight_dependency-3.13.9.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
30
- fosslight_dependency-3.13.9.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
31
- fosslight_dependency-3.13.9.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
32
- fosslight_dependency-3.13.9.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
33
- fosslight_dependency-3.13.9.dist-info/RECORD,,