fosslight-dependency 3.15.6__py3-none-any.whl → 4.1.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.
Files changed (28) hide show
  1. fosslight_dependency/_analyze_dependency.py +5 -4
  2. fosslight_dependency/_graph_convertor.py +9 -10
  3. fosslight_dependency/_package_manager.py +2 -13
  4. fosslight_dependency/dependency_item.py +103 -0
  5. fosslight_dependency/package_manager/Android.py +20 -20
  6. fosslight_dependency/package_manager/Carthage.py +18 -17
  7. fosslight_dependency/package_manager/Cocoapods.py +26 -22
  8. fosslight_dependency/package_manager/Go.py +37 -37
  9. fosslight_dependency/package_manager/Gradle.py +25 -24
  10. fosslight_dependency/package_manager/Helm.py +19 -18
  11. fosslight_dependency/package_manager/Maven.py +24 -24
  12. fosslight_dependency/package_manager/Npm.py +31 -26
  13. fosslight_dependency/package_manager/Nuget.py +31 -28
  14. fosslight_dependency/package_manager/Pub.py +28 -28
  15. fosslight_dependency/package_manager/Pypi.py +24 -21
  16. fosslight_dependency/package_manager/Swift.py +31 -28
  17. fosslight_dependency/package_manager/Unity.py +25 -24
  18. fosslight_dependency/run_dependency_scanner.py +27 -45
  19. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/METADATA +2 -2
  20. fosslight_dependency-4.1.0.dist-info/RECORD +36 -0
  21. fosslight_dependency-3.15.6.dist-info/RECORD +0 -35
  22. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/Apache-2.0.txt +0 -0
  23. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/LICENSE +0 -0
  24. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/LicenseRef-3rd_party_licenses.txt +0 -0
  25. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/MIT.txt +0 -0
  26. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/WHEEL +0 -0
  27. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/entry_points.txt +0 -0
  28. {fosslight_dependency-3.15.6.dist-info → fosslight_dependency-4.1.0.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,8 @@ import fosslight_util.constant as constant
10
10
  import fosslight_dependency.constant as const
11
11
  from fosslight_dependency._package_manager import PackageManager
12
12
  from fosslight_dependency._package_manager import version_refine, get_url_to_purl
13
+ from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
14
+ from fosslight_util.oss_item import OssItem
13
15
 
14
16
  logger = logging.getLogger(constant.LOGGER_NAME)
15
17
 
@@ -33,10 +35,11 @@ class Gradle(PackageManager):
33
35
  with open(f_name, 'r', encoding='utf8') as json_file:
34
36
  json_data = json.load(json_file)
35
37
 
36
- sheet_list = []
38
+ purl_dict = {}
37
39
 
38
40
  for d in json_data['dependencies']:
39
- comment = ''
41
+ dep_item = DependencyItem()
42
+ oss_item = OssItem()
40
43
  used_filename = False
41
44
  group_id = ""
42
45
  artifact_id = ""
@@ -50,51 +53,49 @@ class Gradle(PackageManager):
50
53
  else:
51
54
  oss_name, oss_ini_version = parse_oss_name_version_in_filename(filename)
52
55
  used_filename = True
53
-
54
- dep_key = f"{oss_name}({oss_ini_version})"
56
+ oss_item.name = oss_name
57
+ dep_key = f"{oss_item.name}({oss_ini_version})"
55
58
  if self.total_dep_list:
56
59
  if dep_key not in self.total_dep_list:
57
60
  continue
58
61
 
59
- oss_version = version_refine(oss_ini_version)
62
+ oss_item.version = version_refine(oss_ini_version)
60
63
 
61
- license_names = []
62
- purl = ''
63
64
  try:
65
+ license_names = []
64
66
  for licenses in d['licenses']:
65
67
  if licenses['name'] != '':
66
68
  license_names.append(licenses['name'].replace(",", ""))
67
- license_name = ', '.join(license_names)
69
+ oss_item.license = ', '.join(license_names)
68
70
  except Exception:
69
71
  logger.info("Cannot find the license name")
70
72
 
71
73
  if used_filename or group_id == "":
72
- dn_loc = 'Unknown'
73
- homepage = ''
74
+ oss_item.download_location = 'Unknown'
74
75
  else:
75
- dn_loc = f"{self.dn_url}{group_id}/{artifact_id}/{oss_ini_version}"
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
+ oss_item.download_location = f"{self.dn_url}{group_id}/{artifact_id}/{oss_ini_version}"
77
+ oss_item.homepage = f"{self.dn_url}{group_id}/{artifact_id}"
78
+ dep_item.purl = get_url_to_purl(oss_item.download_location, 'maven')
79
+ purl_dict[f'{oss_item.name}({oss_ini_version})'] = dep_item.purl
79
80
 
80
- comment_list = []
81
- deps_list = []
82
81
  if self.direct_dep:
83
82
  if len(self.direct_dep_list) > 0:
84
83
  if dep_key in self.direct_dep_list:
85
- comment_list.append('direct')
84
+ oss_item.comment = 'direct'
86
85
  else:
87
- comment_list.append('transitive')
86
+ oss_item.comment = 'transitive'
88
87
  try:
89
88
  if dep_key in self.relation_tree:
90
- deps_list.extend(self.relation_tree[dep_key])
89
+ dep_item.depends_on_raw = self.relation_tree[dep_key]
91
90
  except Exception as e:
92
91
  logger.error(f"Fail to find oss scope in dependency tree: {e}")
93
- comment = ','.join(comment_list)
94
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
95
- '', '', comment, deps_list])
96
- sheet_list = self.change_dep_to_purl(sheet_list)
97
- return sheet_list
92
+
93
+ dep_item.oss_items.append(oss_item)
94
+ self.dep_items.append(dep_item)
95
+
96
+ if self.direct_dep:
97
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
98
+ return
98
99
 
99
100
 
100
101
  def parse_oss_name_version_in_filename(name):
@@ -12,6 +12,8 @@ import fosslight_util.constant as constant
12
12
  import fosslight_dependency.constant as const
13
13
  from fosslight_dependency._package_manager import PackageManager, get_url_to_purl
14
14
  from fosslight_util.download import extract_compressed_dir
15
+ from fosslight_dependency.dependency_item import DependencyItem
16
+ from fosslight_util.oss_item import OssItem
15
17
 
16
18
  logger = logging.getLogger(constant.LOGGER_NAME)
17
19
 
@@ -62,7 +64,6 @@ class Helm(PackageManager):
62
64
 
63
65
  def parse_oss_information(self, f_name):
64
66
  dep_item_list = []
65
- sheet_list = []
66
67
  _dependencies = 'dependencies'
67
68
 
68
69
  with open(f_name, 'r', encoding='utf8') as yaml_fp:
@@ -73,33 +74,33 @@ class Helm(PackageManager):
73
74
  for dep in dep_item_list:
74
75
  try:
75
76
  f_path = os.path.join(self.tmp_charts_dir, dep, f_name)
76
- purl = ''
77
+ dep_item = DependencyItem()
78
+ oss_item = OssItem()
77
79
  with open(f_path, 'r', encoding='utf8') as yaml_fp:
78
80
  yaml_f = yaml.safe_load(yaml_fp)
79
- oss_name = f'{self.package_manager_name}:{yaml_f["name"]}'
80
- oss_version = yaml_f.get('version', '')
81
- if oss_version.startswith('v'):
82
- oss_version = oss_version[1:]
81
+ oss_item.name = f'{self.package_manager_name}:{yaml_f["name"]}'
82
+ oss_item.version = yaml_f.get('version', '')
83
+ if oss_item.version.startswith('v'):
84
+ oss_item.version = oss_item.version[1:]
83
85
 
84
- homepage = yaml_f.get('home', '')
85
- dn_loc = ''
86
+ oss_item.homepage = yaml_f.get('home', '')
86
87
  if yaml_f.get('sources', '') != '':
87
- dn_loc = yaml_f.get('sources', '')[0]
88
+ oss_item.download_location = yaml_f.get('sources', '')[0]
88
89
 
89
- purl = get_url_to_purl(dn_loc if dn_loc else homepage, self.package_manager_name)
90
+ dep_item.purl = get_url_to_purl(
91
+ oss_item.download_location if oss_item.download_location else oss_item.homepage,
92
+ self.package_manager_name
93
+ )
90
94
 
91
- license_name = ''
92
95
  if yaml_f.get('annotations', '') != '':
93
- license_name = yaml_f['annotations'].get('licenses', '')
96
+ oss_item.license = yaml_f['annotations'].get('licenses', '')
94
97
 
95
98
  if self.direct_dep:
96
- comment = 'direct'
99
+ oss_item.comment = 'direct'
97
100
 
98
101
  except Exception as e:
99
102
  logging.warning(f"Fail to parse chart info {dep}: {e}")
100
103
  continue
101
-
102
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
103
- '', '', comment, ''])
104
-
105
- return sheet_list
104
+ dep_item.oss_items.append(oss_item)
105
+ self.dep_items.append(dep_item)
106
+ return
@@ -14,6 +14,8 @@ import fosslight_util.constant as constant
14
14
  import fosslight_dependency.constant as const
15
15
  from fosslight_dependency._package_manager import PackageManager
16
16
  from fosslight_dependency._package_manager import version_refine, get_url_to_purl
17
+ from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
18
+ from fosslight_util.oss_item import OssItem
17
19
 
18
20
  logger = logging.getLogger(constant.LOGGER_NAME)
19
21
 
@@ -212,21 +214,21 @@ class Maven(PackageManager):
212
214
 
213
215
  root = tree.getroot()
214
216
  dependencies = root.find("dependencies")
215
-
216
- sheet_list = []
217
- comment = ''
217
+ purl_dict = {}
218
218
 
219
219
  for d in dependencies.iter("dependency"):
220
+ dep_item = DependencyItem()
221
+ oss_item = OssItem()
220
222
  groupid = d.findtext("groupId")
221
223
  artifactid = d.findtext("artifactId")
222
224
  version = d.findtext("version")
223
- oss_version = version_refine(version)
225
+ oss_item.version = version_refine(version)
224
226
 
225
- oss_name = f"{groupid}:{artifactid}"
226
- dn_loc = f"{self.dn_url}{groupid}/{artifactid}/{version}"
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
227
+ oss_item.name = f"{groupid}:{artifactid}"
228
+ oss_item.download_location = f"{self.dn_url}{groupid}/{artifactid}/{version}"
229
+ oss_item.homepage = f"{self.dn_url}{groupid}/{artifactid}"
230
+ dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name)
231
+ purl_dict[f'{oss_item.name}({oss_item.version})'] = dep_item.purl
230
232
 
231
233
  licenses = d.find("licenses")
232
234
  if len(licenses):
@@ -234,26 +236,24 @@ class Maven(PackageManager):
234
236
  for key_license in licenses.iter("license"):
235
237
  if key_license.findtext("name") is not None:
236
238
  license_names.append(key_license.findtext("name").replace(",", ""))
237
- license_name = ', '.join(license_names)
238
- else:
239
- # Case that doesn't include License tag value.
240
- license_name = ''
239
+ oss_item.license = ', '.join(license_names)
240
+
241
+ dep_key = f"{oss_item.name}({version})"
241
242
 
242
- dep_key = f"{oss_name}({version})"
243
- comment_list = []
244
- deps_list = []
245
243
  if self.direct_dep:
246
244
  if dep_key in self.direct_dep_list:
247
- comment_list.append('direct')
245
+ oss_item.comment = 'direct'
248
246
  else:
249
- comment_list.append('transitive')
247
+ oss_item.comment = 'transitive'
250
248
  try:
251
249
  if dep_key in self.relation_tree:
252
- deps_list.extend(self.relation_tree[dep_key])
250
+ dep_item.depends_on_raw = self.relation_tree[dep_key]
253
251
  except Exception as e:
254
252
  logger.error(f"Fail to find oss scope in dependency tree: {e}")
255
- comment = ','.join(comment_list)
256
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
257
- '', '', comment, deps_list])
258
- sheet_list = self.change_dep_to_purl(sheet_list)
259
- return sheet_list
253
+
254
+ dep_item.oss_items.append(oss_item)
255
+ self.dep_items.append(dep_item)
256
+
257
+ if self.direct_dep:
258
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
259
+ return
@@ -12,6 +12,8 @@ import re
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, get_url_to_purl
15
+ from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
16
+ from fosslight_util.oss_item import OssItem
15
17
 
16
18
  logger = logging.getLogger(constant.LOGGER_NAME)
17
19
  node_modules = 'node_modules'
@@ -148,25 +150,25 @@ class Npm(PackageManager):
148
150
  with open(f_name, 'r', encoding='utf8') as json_file:
149
151
  json_data = json.load(json_file)
150
152
 
151
- sheet_list = []
152
- comment = ''
153
153
  _licenses = 'licenses'
154
154
  _repository = 'repository'
155
155
  _private = 'private'
156
156
 
157
157
  keys = [key for key in json_data]
158
-
158
+ purl_dict = {}
159
159
  for i in range(0, len(keys)):
160
+ dep_item = DependencyItem()
161
+ oss_item = OssItem()
160
162
  d = json_data.get(keys[i - 1])
161
163
  oss_init_name = d['name']
162
- oss_name = self.package_manager_name + ":" + oss_init_name
164
+ oss_item.name = self.package_manager_name + ":" + oss_init_name
163
165
 
164
166
  if d[_licenses]:
165
167
  license_name = d[_licenses]
166
168
  else:
167
169
  license_name = ''
168
170
 
169
- oss_version = d['version']
171
+ oss_item.version = d['version']
170
172
  package_path = d['path']
171
173
 
172
174
  private_pkg = False
@@ -174,45 +176,48 @@ class Npm(PackageManager):
174
176
  if d[_private]:
175
177
  private_pkg = True
176
178
 
177
- homepage = self.dn_url + oss_init_name
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
+ oss_item.homepage = self.dn_url + oss_init_name
180
+ dn_loc = f"{self.dn_url}{oss_init_name}/v/{oss_item.version}"
181
+ dep_item.purl = get_url_to_purl(dn_loc, self.package_manager_name)
182
+ purl_dict[f'{oss_init_name}({oss_item.version})'] = dep_item.purl
181
183
  if d[_repository]:
182
184
  dn_loc = d[_repository]
183
185
  elif private_pkg:
184
186
  dn_loc = ''
185
187
 
186
- comment_list = []
187
- deps_list = []
188
+ oss_item.download_location = dn_loc
189
+
188
190
  if private_pkg:
189
- homepage = dn_loc
190
- comment_list.append('private')
191
- if self.package_name == f'{oss_init_name}({oss_version})':
192
- comment_list.append('root package')
191
+ oss_item.homepage = oss_item.download_location
192
+ oss_item.comment = 'private'
193
+ if self.package_name == f'{oss_init_name}({oss_item.version})':
194
+ oss_item.comment = 'root package'
193
195
  elif self.direct_dep and len(self.relation_tree) > 0:
194
- if f'{oss_init_name}({oss_version})' in self.relation_tree[self.package_name]:
195
- comment_list.append('direct')
196
+ if f'{oss_init_name}({oss_item.version})' in self.relation_tree[self.package_name]:
197
+ oss_item.comment = 'direct'
196
198
  else:
197
- comment_list.append('transitive')
199
+ oss_item.comment = 'transitive'
198
200
 
199
- if f'{oss_init_name}({oss_version})' in self.relation_tree:
200
- deps_list.extend(self.relation_tree[f'{oss_init_name}({oss_version})'])
201
+ if f'{oss_init_name}({oss_item.version})' in self.relation_tree:
202
+ dep_item.depends_on_raw = self.relation_tree[f'{oss_init_name}({oss_item.version})']
201
203
 
202
204
  manifest_file_path = os.path.join(package_path, const.SUPPORT_PACKAE.get(self.package_manager_name))
203
205
  multi_license, license_comment, multi_flag = check_multi_license(license_name, manifest_file_path)
204
206
 
205
- comment = ','.join(comment_list)
206
207
  if multi_flag:
207
- comment = f'{comment}, {license_comment}'
208
+ oss_item.comment = license_comment
208
209
  license_name = multi_license
209
210
  else:
210
211
  license_name = license_name.replace(",", "")
211
212
  license_name = check_unknown_license(license_name, manifest_file_path)
212
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
213
- '', '', comment, deps_list])
214
- sheet_list = self.change_dep_to_purl(sheet_list)
215
- return sheet_list
213
+ oss_item.license = license_name
214
+
215
+ dep_item.oss_items.append(oss_item)
216
+ self.dep_items.append(dep_item)
217
+
218
+ if self.direct_dep:
219
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
220
+ return
216
221
 
217
222
 
218
223
  def check_multi_license(license_name, manifest_file_path):
@@ -13,6 +13,8 @@ import fosslight_util.constant as constant
13
13
  import fosslight_dependency.constant as const
14
14
  from fosslight_dependency._package_manager import PackageManager
15
15
  from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
16
+ from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
17
+ from fosslight_util.oss_item import OssItem
16
18
 
17
19
  logger = logging.getLogger(constant.LOGGER_NAME)
18
20
 
@@ -37,7 +39,7 @@ class Nuget(PackageManager):
37
39
  def parse_oss_information(self, f_name):
38
40
  tmp_license_txt_file_name = 'tmp_license.txt'
39
41
  with open(f_name, 'r', encoding='utf8') as input_fp:
40
- sheet_list = []
42
+ purl_dict = {}
41
43
  package_list = []
42
44
  if self.packageReference:
43
45
  package_list = self.get_package_info_in_packagereference(input_fp)
@@ -46,14 +48,13 @@ class Nuget(PackageManager):
46
48
 
47
49
  for oss_origin_name, oss_version in package_list:
48
50
  try:
49
- oss_name = f'{self.package_manager_name}:{oss_origin_name}'
51
+ dep_item = DependencyItem()
52
+ oss_item = OssItem()
53
+ oss_item.name = f'{self.package_manager_name}:{oss_origin_name}'
54
+ oss_item.version = oss_version
50
55
 
51
- comment_list = []
52
- dn_loc = ''
53
- homepage = ''
54
56
  license_name = ''
55
-
56
- response = requests.get(f'{self.nuget_api_url}{oss_origin_name}/{oss_version}/{oss_origin_name}.nuspec')
57
+ response = requests.get(f'{self.nuget_api_url}{oss_origin_name}/{oss_item.version}/{oss_origin_name}.nuspec')
57
58
  if response.status_code == 200:
58
59
  root = fromstring(response.text)
59
60
  xmlns = ''
@@ -66,7 +67,7 @@ class Nuget(PackageManager):
66
67
  if license_name_id is not None:
67
68
  license_name, license_comment = self.check_multi_license(license_name_id.text)
68
69
  if license_comment != '':
69
- comment_list.append(license_comment)
70
+ oss_item.comment = license_comment
70
71
  else:
71
72
  license_url = nupkg_metadata.find(f'{xmlns}licenseUrl')
72
73
  if license_url is not None:
@@ -82,45 +83,47 @@ class Nuget(PackageManager):
82
83
  license_name = license_name_with_license_scanner
83
84
  else:
84
85
  license_name = license_url.text
86
+ oss_item.license = license_name
85
87
  repo_id = nupkg_metadata.find(f'{xmlns}repository')
86
88
  if repo_id is not None:
87
- dn_loc = repo_id.get("url")
89
+ oss_item.download_location = repo_id.get("url")
88
90
  else:
89
91
  proj_url_id = nupkg_metadata.find(f'{xmlns}projectUrl')
90
92
  if proj_url_id is not None:
91
- dn_loc = proj_url_id.text
92
- homepage = f'{self.dn_url}{oss_origin_name}'
93
- if dn_loc == '':
94
- dn_loc = f'{homepage}/{oss_version}'
93
+ oss_item.download_location = proj_url_id.text
94
+ oss_item.homepage = f'{self.dn_url}{oss_origin_name}'
95
+ if oss_item.download_location == '':
96
+ oss_item.download_location = f'{oss_item.homepage}/{oss_item.version}'
95
97
  else:
96
- if dn_loc.endswith('.git'):
97
- dn_loc = dn_loc[:-4]
98
- purl = get_url_to_purl(f'{homepage}/{oss_version}', self.package_manager_name)
98
+ if oss_item.download_location.endswith('.git'):
99
+ oss_item.download_location = oss_item.download_location[:-4]
100
+ dep_item.purl = get_url_to_purl(f'{oss_item.homepage}/{oss_item.version}', self.package_manager_name)
99
101
  else:
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
102
+ oss_item.comment = 'Fail to response for nuget api'
103
+ dep_item.purl = f'pkg:nuget/{oss_origin_name}@{oss_item.version}'
104
+ purl_dict[f'{oss_origin_name}({oss_item.version})'] = dep_item.purl
103
105
 
104
- deps_list = []
105
106
  if self.direct_dep and self.packageReference:
106
107
  if oss_origin_name in self.direct_dep_list:
107
- comment_list.append('direct')
108
+ oss_item.comment = 'direct'
108
109
  else:
109
- comment_list.append('transitive')
110
+ oss_item.comment = 'transitive'
110
111
 
111
- if f'{oss_origin_name}({oss_version})' in self.relation_tree:
112
- deps_list.extend(self.relation_tree[f'{oss_origin_name}({oss_version})'])
112
+ if f'{oss_origin_name}({oss_item.version})' in self.relation_tree:
113
+ dep_item.depends_on_raw = self.relation_tree[f'{oss_origin_name}({oss_item.version})']
113
114
 
114
- comment = ','.join(comment_list)
115
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage, '', '', comment, deps_list])
115
+ dep_item.oss_items.append(oss_item)
116
+ self.dep_items.append(dep_item)
116
117
 
117
118
  except Exception as e:
118
119
  logger.warning(f"Failed to parse oss information: {e}")
119
- sheet_list = self.change_dep_to_purl(sheet_list)
120
+ if self.direct_dep:
121
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
122
+
120
123
  if os.path.isfile(tmp_license_txt_file_name):
121
124
  os.remove(tmp_license_txt_file_name)
122
125
 
123
- return sheet_list
126
+ return
124
127
 
125
128
  def get_package_list_in_packages_config(self, input_fp):
126
129
  package_list = []
@@ -14,6 +14,8 @@ import fosslight_util.constant as constant
14
14
  import fosslight_dependency.constant as const
15
15
  from fosslight_dependency._package_manager import PackageManager
16
16
  from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
17
+ from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
18
+ from fosslight_util.oss_item import OssItem
17
19
 
18
20
  logger = logging.getLogger(constant.LOGGER_NAME)
19
21
 
@@ -104,28 +106,29 @@ class Pub(PackageManager):
104
106
  def parse_oss_information(self, f_name):
105
107
  tmp_license_txt_file_name = 'tmp_license.txt'
106
108
  json_data = ''
107
- comment = ''
108
109
 
109
110
  with open(f_name, 'r', encoding='utf8') as pub_file:
110
111
  json_f = json.load(pub_file)
111
112
 
112
113
  try:
113
- sheet_list = []
114
+ purl_dict = {}
114
115
 
115
116
  for json_data in json_f:
117
+ dep_item = DependencyItem()
118
+ oss_item = OssItem()
116
119
  oss_origin_name = json_data['name']
117
120
  if oss_origin_name not in self.total_dep_list:
118
121
  continue
119
- oss_name = f"{self.package_manager_name}:{oss_origin_name}"
120
- oss_version = json_data['version']
121
- homepage = json_data['homepage']
122
- if homepage is None:
123
- homepage = json_data['repository']
124
- if homepage is None:
125
- homepage = ''
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
122
+ oss_item.name = f"{self.package_manager_name}:{oss_origin_name}"
123
+ oss_item.version = json_data['version']
124
+ oss_item.homepage = json_data['homepage']
125
+ if oss_item.homepage is None:
126
+ oss_item.homepage = json_data['repository']
127
+ if oss_item.homepage is None:
128
+ oss_item.homepage = ''
129
+ oss_item.download_location = f"{self.dn_url}{oss_origin_name}/versions/{oss_item.version}"
130
+ dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name)
131
+ purl_dict[f'{oss_origin_name}({oss_item.version})'] = dep_item.purl
129
132
  license_txt = json_data['license']
130
133
 
131
134
  tmp_license_txt = open(tmp_license_txt_file_name, 'w', encoding='utf-8')
@@ -137,36 +140,33 @@ class Pub(PackageManager):
137
140
  tmp_license_txt_file_name)
138
141
 
139
142
  if license_name_with_license_scanner != "":
140
- license_name = license_name_with_license_scanner
141
- else:
142
- license_name = ''
143
+ oss_item.license = license_name_with_license_scanner
143
144
 
144
- comment_list = []
145
- deps_list = []
146
145
  if self.direct_dep:
147
146
  if oss_origin_name not in self.total_dep_list:
148
147
  continue
149
- if self.package_name == f'{oss_origin_name}({oss_version})':
150
- comment_list.append('root package')
148
+ if self.package_name == f'{oss_origin_name}({oss_item.version})':
149
+ oss_item.comment = 'root package'
151
150
  else:
152
151
  if json_data['isDirectDependency']:
153
- comment_list.append('direct')
152
+ oss_item.comment = 'direct'
154
153
  else:
155
- comment_list.append('transitive')
154
+ oss_item.comment = 'transitive'
155
+
156
+ if f'{oss_origin_name}({oss_item.version})' in self.relation_tree:
157
+ dep_item.depends_on_raw = self.relation_tree[f'{oss_origin_name}({oss_item.version})']
156
158
 
157
- if f'{oss_origin_name}({oss_version})' in self.relation_tree:
158
- deps_list.extend(self.relation_tree[f'{oss_origin_name}({oss_version})'])
159
- comment = ','.join(comment_list)
160
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
161
- '', '', comment, deps_list])
159
+ dep_item.oss_items.append(oss_item)
160
+ self.dep_items.append(dep_item)
162
161
  except Exception as e:
163
162
  logger.error(f"Fail to parse pub oss information: {e}")
164
- sheet_list = self.change_dep_to_purl(sheet_list)
163
+ if self.direct_dep:
164
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
165
165
 
166
166
  if os.path.isfile(tmp_license_txt_file_name):
167
167
  os.remove(tmp_license_txt_file_name)
168
168
 
169
- return sheet_list
169
+ return
170
170
 
171
171
  def parse_no_dev_command_file(self, pub_deps):
172
172
  for line in pub_deps.split('\n'):