fosslight-dependency 3.15.5__py3-none-any.whl → 4.0.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 (29) hide show
  1. fosslight_dependency/_analyze_dependency.py +5 -4
  2. fosslight_dependency/_graph_convertor.py +67 -0
  3. fosslight_dependency/_help.py +4 -0
  4. fosslight_dependency/_package_manager.py +2 -13
  5. fosslight_dependency/dependency_item.py +103 -0
  6. fosslight_dependency/package_manager/Android.py +20 -20
  7. fosslight_dependency/package_manager/Carthage.py +18 -17
  8. fosslight_dependency/package_manager/Cocoapods.py +26 -22
  9. fosslight_dependency/package_manager/Go.py +37 -37
  10. fosslight_dependency/package_manager/Gradle.py +25 -24
  11. fosslight_dependency/package_manager/Helm.py +19 -18
  12. fosslight_dependency/package_manager/Maven.py +24 -24
  13. fosslight_dependency/package_manager/Npm.py +31 -26
  14. fosslight_dependency/package_manager/Nuget.py +31 -28
  15. fosslight_dependency/package_manager/Pub.py +28 -28
  16. fosslight_dependency/package_manager/Pypi.py +24 -21
  17. fosslight_dependency/package_manager/Swift.py +31 -28
  18. fosslight_dependency/package_manager/Unity.py +25 -24
  19. fosslight_dependency/run_dependency_scanner.py +44 -31
  20. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/METADATA +4 -2
  21. fosslight_dependency-4.0.0.dist-info/RECORD +36 -0
  22. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/WHEEL +1 -1
  23. fosslight_dependency-3.15.5.dist-info/RECORD +0 -34
  24. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/Apache-2.0.txt +0 -0
  25. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/LICENSE +0 -0
  26. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/LicenseRef-3rd_party_licenses.txt +0 -0
  27. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/MIT.txt +0 -0
  28. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/entry_points.txt +0 -0
  29. {fosslight_dependency-3.15.5.dist-info → fosslight_dependency-4.0.0.dist-info}/top_level.txt +0 -0
@@ -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
 
@@ -279,23 +281,24 @@ class Pypi(PackageManager):
279
281
  return ret
280
282
 
281
283
  def parse_oss_information(self, f_name):
282
- sheet_list = []
283
- comment = ''
284
+ purl_dict = {}
284
285
  try:
285
286
  oss_init_name = ''
286
287
  with open(f_name, 'r', encoding='utf-8') as json_file:
287
288
  json_data = json.load(json_file)
288
289
 
289
290
  for d in json_data:
291
+ dep_item = DependencyItem()
292
+ oss_item = OssItem()
290
293
  oss_init_name = d['Name']
291
294
  oss_init_name = re.sub(r"[-_.]+", "-", oss_init_name).lower()
292
- oss_name = f"{self.package_manager_name}:{oss_init_name}"
295
+ oss_item.name = f"{self.package_manager_name}:{oss_init_name}"
293
296
  license_name = check_UNKNOWN(d['License'])
294
- homepage = check_UNKNOWN(d['URL'])
295
- oss_version = d['Version']
296
- dn_loc = f"{self.dn_url}{oss_init_name}/{oss_version}"
297
- purl = get_url_to_purl(dn_loc, self.package_manager_name)
298
- self.purl_dict[f'{oss_init_name}({oss_version})'] = purl
297
+ oss_item.homepage = check_UNKNOWN(d['URL'])
298
+ oss_item.version = d['Version']
299
+ oss_item.download_location = f"{self.dn_url}{oss_init_name}/{oss_item.version}"
300
+ dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name)
301
+ purl_dict[f'{oss_init_name}({oss_item.version})'] = dep_item.purl
299
302
  if license_name is not None:
300
303
  license_name = license_name.replace(';', ',')
301
304
  else:
@@ -305,26 +308,26 @@ class Pypi(PackageManager):
305
308
  license_file_dir)
306
309
  if license_name_with_lic_scanner != "":
307
310
  license_name = license_name_with_lic_scanner
311
+ oss_item.license = license_name
308
312
 
309
- comment_list = []
310
- deps_list = []
311
313
  if oss_init_name == self.package_name:
312
- comment_list.append('root package')
314
+ oss_item.comment = 'root package'
313
315
  elif self.direct_dep and len(self.direct_dep_list) > 0:
314
- if f'{oss_init_name}({oss_version})' in self.direct_dep_list:
315
- comment_list.append('direct')
316
+ if f'{oss_init_name}({oss_item.version})' in self.direct_dep_list:
317
+ oss_item.comment = 'direct'
316
318
  else:
317
- comment_list.append('transitive')
318
- if f'{oss_init_name}({oss_version})' in self.relation_tree:
319
- deps_list.extend(self.relation_tree[f'{oss_init_name}({oss_version})'])
320
- comment = ','.join(comment_list)
321
- sheet_list.append([purl, oss_name, oss_version,
322
- license_name, dn_loc, homepage, '', '', comment, deps_list])
319
+ oss_item.comment = 'transitive'
320
+ if f'{oss_init_name}({oss_item.version})' in self.relation_tree:
321
+ dep_item.depends_on_raw = self.relation_tree[f'{oss_init_name}({oss_item.version})']
322
+
323
+ dep_item.oss_items.append(oss_item)
324
+ self.dep_items.append(dep_item)
323
325
 
324
326
  except Exception as ex:
325
327
  logger.warning(f"Fail to parse oss information: {oss_init_name}({ex})")
326
- sheet_list = self.change_dep_to_purl(sheet_list)
327
- return sheet_list
328
+ if self.direct_dep:
329
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
330
+ return
328
331
 
329
332
  def get_dependencies(self, dependencies, package):
330
333
  package_name = 'package_name'
@@ -12,6 +12,8 @@ import fosslight_dependency.constant as const
12
12
  from fosslight_dependency._package_manager import PackageManager
13
13
  from fosslight_dependency._package_manager import connect_github, get_github_license
14
14
  from fosslight_dependency._package_manager import 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
 
@@ -96,8 +98,8 @@ class Swift(PackageManager):
96
98
  return ret
97
99
 
98
100
  def parse_oss_information(self, f_name):
99
- sheet_list = []
100
101
  json_ver = 1
102
+ purl_dict = {}
101
103
 
102
104
  with open(f_name, 'r', encoding='utf8') as json_file:
103
105
  json_raw = json.load(json_file)
@@ -109,47 +111,48 @@ class Swift(PackageManager):
109
111
  json_data = json_raw["pins"]
110
112
  else:
111
113
  logger.error(f'Not supported Package.resolved version {json_ver}')
112
- return sheet_list
114
+ return
113
115
 
114
116
  g = connect_github(self.github_token)
115
117
 
116
118
  for key in json_data:
119
+ dep_item = DependencyItem()
120
+ oss_item = OssItem()
117
121
  if json_ver == 1:
118
122
  oss_origin_name = key['package']
119
- homepage = key['repositoryURL']
123
+ oss_item.homepage = key['repositoryURL']
120
124
  elif json_ver == 2:
121
125
  oss_origin_name = key['identity']
122
- homepage = key['location']
126
+ oss_item.homepage = key['location']
123
127
 
124
- if homepage.endswith('.git'):
125
- homepage = homepage[:-4]
128
+ if oss_item.homepage.endswith('.git'):
129
+ oss_item.homepage = oss_item.homepage[:-4]
126
130
 
127
- oss_name = f"{self.package_manager_name}:{oss_origin_name}"
131
+ oss_item.name = f"{self.package_manager_name}:{oss_origin_name}"
128
132
 
129
- oss_version = key['state'].get('version', None)
130
- if oss_version is None:
131
- oss_version = key['state'].get('revision', None)
133
+ oss_item.version = key['state'].get('version', None)
134
+ if oss_item.version is None:
135
+ oss_item.version = key['state'].get('revision', None)
132
136
 
133
- dn_loc = homepage
134
- license_name = ''
137
+ oss_item.download_location = oss_item.homepage
135
138
 
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
139
- license_name = get_github_license(g, github_repo, self.platform, self.license_scanner_bin)
139
+ github_repo = "/".join(oss_item.homepage.split('/')[-2:])
140
+ dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name, github_repo, oss_item.version)
141
+ purl_dict[f'{oss_origin_name}({oss_item.version})'] = dep_item.purl
142
+ oss_item.license = get_github_license(g, github_repo, self.platform, self.license_scanner_bin)
140
143
 
141
- comment_list = []
142
- deps_list = []
143
144
  if self.direct_dep and len(self.direct_dep_list) > 0:
144
145
  if oss_origin_name in self.direct_dep_list:
145
- comment_list.append('direct')
146
+ oss_item.comment = 'direct'
146
147
  else:
147
- comment_list.append('transitive')
148
-
149
- if f'{oss_origin_name}({oss_version})' in self.relation_tree:
150
- deps_list.extend(self.relation_tree[f'{oss_origin_name}({oss_version})'])
151
- comment = ','.join(comment_list)
152
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
153
- '', '', comment, deps_list])
154
- sheet_list = self.change_dep_to_purl(sheet_list)
155
- return sheet_list
148
+ oss_item.comment = 'transitive'
149
+ if f'{oss_origin_name}({oss_item.version})' in self.relation_tree:
150
+ dep_item.depends_on_raw = self.relation_tree[f'{oss_origin_name}({oss_item.version})']
151
+
152
+ dep_item.oss_items.append(oss_item)
153
+ self.dep_items.append(dep_item)
154
+
155
+ if self.direct_dep:
156
+ self.dep_items = change_dependson_to_purl(purl_dict, self.dep_items)
157
+
158
+ return
@@ -11,6 +11,8 @@ import fosslight_util.constant as constant
11
11
  import fosslight_dependency.constant as const
12
12
  from fosslight_dependency._package_manager import PackageManager
13
13
  from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
14
+ from fosslight_dependency.dependency_item import DependencyItem
15
+ from fosslight_util.oss_item import OssItem
14
16
 
15
17
  logger = logging.getLogger(constant.LOGGER_NAME)
16
18
  proprietary_license = 'Proprietary License'
@@ -33,20 +35,18 @@ class Unity(PackageManager):
33
35
  self.append_input_package_list_file(self.input_file_name)
34
36
 
35
37
  def parse_oss_information(self, f_name):
36
- comment = ''
37
-
38
38
  with open(f_name, 'r', encoding='utf8') as f:
39
39
  f_yml = yaml.safe_load(f)
40
40
  resolvedPkg = f_yml['m_ResolvedPackages']
41
41
 
42
42
  try:
43
- sheet_list = []
44
-
45
43
  for pkg_data in resolvedPkg:
46
- oss_name = pkg_data['name']
47
- oss_version = pkg_data['version']
44
+ dep_item = DependencyItem()
45
+ oss_item = OssItem()
46
+ oss_item.name = pkg_data['name']
47
+ oss_item.version = pkg_data['version']
48
48
 
49
- oss_packagecache_dir = os.path.join(self.packageCache_dir, f'{oss_name}@{oss_version}')
49
+ oss_packagecache_dir = os.path.join(self.packageCache_dir, f'{oss_item.name}@{oss_item.version}')
50
50
  license_f = os.path.join(oss_packagecache_dir, license_md)
51
51
  if os.path.isfile(license_f):
52
52
  license_name = check_and_run_license_scanner(self.platform,
@@ -61,6 +61,7 @@ class Unity(PackageManager):
61
61
  break
62
62
  else:
63
63
  license_name = proprietary_license
64
+ oss_item.license = license_name
64
65
 
65
66
  third_f = os.path.join(oss_packagecache_dir, third_party_md)
66
67
  if os.path.isfile(third_f):
@@ -71,21 +72,21 @@ class Unity(PackageManager):
71
72
  tf.write(line)
72
73
  tf.flush()
73
74
 
74
- homepage = pkg_data['repository']['url']
75
- if homepage and homepage.startswith('git@'):
76
- homepage = homepage.replace('git@', 'https://')
77
- if homepage is None or homepage.startswith(self.unity_internal_url):
75
+ oss_item.homepage = pkg_data['repository']['url']
76
+ if oss_item.homepage and oss_item.homepage.startswith('git@'):
77
+ oss_item.homepage = oss_item.homepage.replace('git@', 'https://')
78
+ if oss_item.homepage is None or oss_item.homepage.startswith(self.unity_internal_url):
78
79
  if license_name != proprietary_license:
79
- homepage = f'{self.mirror_url}{oss_name}'
80
- if homepage is None:
81
- homepage = ''
80
+ oss_item.homepage = f'{self.mirror_url}{oss_item.name}'
81
+ if oss_item.homepage is None:
82
+ oss_item.homepage = ''
82
83
 
83
- dn_loc = homepage
84
- purl = get_url_to_purl(dn_loc, self.package_manager_name)
85
- if purl == 'None':
86
- purl = ''
87
- if purl != '':
88
- purl = f'{purl}@{oss_version}'
84
+ oss_item.download_location = oss_item.homepage
85
+ dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name)
86
+ if dep_item.purl == 'None':
87
+ dep_item.purl = ''
88
+ if dep_item.purl != '':
89
+ dep_item.purl = f'{dep_item.purl}@{oss_item.version}'
89
90
 
90
91
  comment_list = []
91
92
  if self.direct_dep:
@@ -94,10 +95,10 @@ class Unity(PackageManager):
94
95
  else:
95
96
  comment_list.append('transitive')
96
97
 
97
- comment = ','.join(comment_list)
98
- sheet_list.append([purl, oss_name, oss_version, license_name, dn_loc, homepage,
99
- '', '', comment, ''])
98
+ oss_item.comment = ','.join(comment_list)
99
+ dep_item.oss_items.append(oss_item)
100
+ self.dep_items.append(dep_item)
100
101
  except Exception as e:
101
102
  logger.error(f"Fail to parse unity oss information: {e}")
102
103
 
103
- return sheet_list
104
+ return
@@ -20,7 +20,8 @@ from fosslight_dependency._analyze_dependency import analyze_dependency
20
20
  from fosslight_util.output_format import check_output_formats, 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
+ from fosslight_util.oss_item import ScannerItem
24
+ from fosslight_dependency._graph_convertor import GraphConvertor
24
25
 
25
26
  # Package Name
26
27
  _PKG_NAME = "fosslight_dependency"
@@ -92,14 +93,14 @@ def find_package_manager(input_dir, abs_path_to_exclude=[]):
92
93
 
93
94
  def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='', pip_activate_cmd='',
94
95
  pip_deactivate_cmd='', output_custom_dir='', app_name=const.default_app_name,
95
- github_token='', formats=[], direct=True, path_to_exclude=[]):
96
+ github_token='', formats=[], direct=True, path_to_exclude=[], graph_path='',
97
+ graph_size=(600, 600)):
96
98
  global logger
97
99
 
98
100
  ret = True
99
- sheet_list = {}
100
- sheet_list[_sheet_name] = []
101
101
  _json_ext = ".json"
102
102
  _start_time = datetime.now().strftime('%y%m%d_%H%M')
103
+ scan_item = ScannerItem(_PKG_NAME, _start_time)
103
104
 
104
105
  success, msg, output_path, output_files, output_extensions = check_output_formats(output_dir_file, formats, CUSTOMIZED_FORMAT)
105
106
  if success:
@@ -149,7 +150,7 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
149
150
 
150
151
  if not success:
151
152
  logger.error(msg)
152
- return False, sheet_list
153
+ return False, scan_item
153
154
 
154
155
  autodetect = True
155
156
  if package_manager:
@@ -160,7 +161,7 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
160
161
  logger.error(f"You entered the unsupported package manager({package_manager}).")
161
162
  logger.error("Please enter the supported package manager({0}) with '-m' option."
162
163
  .format(", ".join(support_packagemanager)))
163
- return False, sheet_list
164
+ return False, scan_item
164
165
 
165
166
  if input_dir:
166
167
  if os.path.isdir(input_dir):
@@ -169,10 +170,11 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
169
170
  else:
170
171
  logger.error(f"You entered the wrong input path({input_dir}) to run the script.")
171
172
  logger.error("Please enter the existed input path with '-p' option.")
172
- return False, sheet_list
173
+ return False, scan_item
173
174
  else:
174
175
  input_dir = os.getcwd()
175
176
  os.chdir(input_dir)
177
+ scan_item.set_cover_pathinfo(input_dir, path_to_exclude)
176
178
 
177
179
  found_package_manager = {}
178
180
  if autodetect:
@@ -196,13 +198,13 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
196
198
  for pm, manifest_file_name in found_package_manager.items():
197
199
  if manifest_file_name == pass_key:
198
200
  continue
199
- ret, package_sheet_list, cover_comment = analyze_dependency(pm, input_dir, output_path,
200
- pip_activate_cmd, pip_deactivate_cmd,
201
- output_custom_dir, app_name, github_token,
202
- manifest_file_name, direct)
201
+ ret, package_dep_item_list, cover_comment = analyze_dependency(pm, input_dir, output_path,
202
+ pip_activate_cmd, pip_deactivate_cmd,
203
+ output_custom_dir, app_name, github_token,
204
+ manifest_file_name, direct)
203
205
  if ret:
204
206
  success_pm.append(f"{pm} ({', '.join(manifest_file_name)})")
205
- sheet_list[_sheet_name].extend(package_sheet_list)
207
+ scan_item.append_file_items(package_dep_item_list)
206
208
  if pm == const.GRADLE:
207
209
  if const.ANDROID in found_package_manager.keys():
208
210
  found_package_manager[const.ANDROID] = pass_key
@@ -215,23 +217,27 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
215
217
  fail_pm.remove(f"{const.GRADLE} ({', '.join(manifest_file_name)})")
216
218
  else:
217
219
  fail_pm.append(f"{pm} ({', '.join(manifest_file_name)})")
218
- cover = CoverItem(tool_name=_PKG_NAME,
219
- start_time=_start_time,
220
- input_path=input_dir,
221
- exclude_path=path_to_exclude)
222
- cover_comment_arr = []
220
+
223
221
  if len(found_package_manager.keys()) > 0:
224
222
  if len(success_pm) > 0:
225
- cover_comment_arr.append(f"Analyzed Package manager: {', '.join(success_pm)}")
223
+ scan_item.set_cover_comment(f"Analyzed Package manager: {', '.join(success_pm)}")
226
224
  if len(fail_pm) > 0:
227
225
  info_msg = 'Check https://fosslight.org/fosslight-guide-en/scanner/3_dependency.html#-prerequisite.'
228
- cover_comment_arr.append(f"Analysis failed Package manager: {', '.join(fail_pm)} ({info_msg})")
226
+ scan_item.set_cover_comment(f"Analysis failed Package manager: {', '.join(fail_pm)} ({info_msg})")
229
227
  else:
230
- cover_comment_arr.append("No Package manager detected.")
228
+ scan_item.set_cover_comment("No Package manager detected.")
229
+
230
+ if ret and graph_path:
231
+ graph_path = os.path.abspath(graph_path)
232
+ try:
233
+ converter = GraphConvertor(scan_item.file_items[_PKG_NAME])
234
+ converter.save(graph_path, graph_size)
235
+ logger.info(f"Output graph image file: {graph_path}")
236
+ except Exception as e:
237
+ logger.error(f'Fail to make graph image: {e}')
231
238
 
232
- cover.comment = ' / '.join(cover_comment_arr)
233
239
  if cover_comment:
234
- cover.comment += f', {cover_comment}'
240
+ scan_item.set_cover_comment(cover_comment)
235
241
 
236
242
  combined_paths_and_files = [os.path.join(output_path, file) for file in output_files]
237
243
  results = []
@@ -239,30 +245,28 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
239
245
  if formats:
240
246
  if formats[i].startswith('spdx'):
241
247
  if platform.system() != 'Windows':
242
- results.append(write_spdx(combined_paths_and_files[i], output_extension, sheet_list, _PKG_NAME,
248
+ results.append(write_spdx(combined_paths_and_files[i], output_extension, scan_item, _PKG_NAME,
243
249
  pkg_resources.get_distribution(_PKG_NAME).version, spdx_version=(2, 3)))
244
250
  else:
245
251
  logger.error('Windows not support spdx format.')
246
252
  else:
247
- results.append(write_output_file(combined_paths_and_files[i], output_extension, sheet_list, EXTENDED_HEADER,
248
- '', cover))
253
+ results.append(write_output_file(combined_paths_and_files[i], output_extension, scan_item, EXTENDED_HEADER))
249
254
  else:
250
- results.append(write_output_file(combined_paths_and_files[i], output_extension, sheet_list, EXTENDED_HEADER,
251
- '', cover))
255
+ results.append(write_output_file(combined_paths_and_files[i], output_extension, scan_item, EXTENDED_HEADER))
252
256
  for success_write, err_msg, result_file in results:
253
257
  if success_write:
254
258
  if result_file:
255
259
  logger.info(f"Output file: {result_file}")
256
260
  else:
257
261
  logger.warning(f"{err_msg}")
258
- for i in cover_comment_arr:
259
- logger.info(i.strip())
262
+ for i in scan_item.get_cover_comment():
263
+ logger.info(i)
260
264
  else:
261
265
  ret = False
262
266
  logger.error(f"Fail to generate result file. msg:({err_msg})")
263
267
 
264
268
  logger.warning("### FINISH ###")
265
- return ret, sheet_list
269
+ return ret, scan_item
266
270
 
267
271
 
268
272
  def main():
@@ -276,6 +280,8 @@ def main():
276
280
  app_name = const.default_app_name
277
281
  github_token = ''
278
282
  format = ''
283
+ graph_path = ''
284
+ graph_size = (600, 600)
279
285
  direct = True
280
286
 
281
287
  parser = argparse.ArgumentParser(add_help=False)
@@ -291,6 +297,8 @@ def main():
291
297
  parser.add_argument('-n', '--appname', nargs=1, type=str, required=False)
292
298
  parser.add_argument('-t', '--token', nargs=1, type=str, required=False)
293
299
  parser.add_argument('-f', '--format', nargs="*", type=str, required=False)
300
+ parser.add_argument('--graph-path', nargs=1, type=str, required=False)
301
+ parser.add_argument('--graph-size', nargs=2, type=int, metavar=("WIDTH", "HEIGHT"), required=False)
294
302
  parser.add_argument('--direct', choices=('true', 'false'), default='True', required=False)
295
303
  parser.add_argument('--notice', action='store_true', required=False)
296
304
 
@@ -324,6 +332,10 @@ def main():
324
332
  github_token = ''.join(args.token)
325
333
  if args.format: # -f option
326
334
  format = list(args.format)
335
+ if args.graph_path:
336
+ graph_path = ''.join(args.graph_path)
337
+ if args.graph_size:
338
+ graph_size = args.graph_size
327
339
  if args.direct: # --direct option
328
340
  if args.direct == 'true':
329
341
  direct = True
@@ -343,7 +355,8 @@ def main():
343
355
  sys.exit(0)
344
356
 
345
357
  run_dependency_scanner(package_manager, input_dir, output_dir, pip_activate_cmd, pip_deactivate_cmd,
346
- output_custom_dir, app_name, github_token, format, direct, path_to_exclude)
358
+ output_custom_dir, app_name, github_token, format, direct, path_to_exclude,
359
+ graph_path, graph_size)
347
360
 
348
361
 
349
362
  if __name__ == '__main__':
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-dependency
3
- Version: 3.15.5
3
+ Version: 4.0.0
4
4
  Summary: FOSSLight Dependency Scanner
5
5
  Home-page: https://github.com/fosslight/fosslight_dependency_scanner
6
6
  Author: LG Electronics
@@ -20,11 +20,13 @@ 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.47
23
+ Requires-Dist: fosslight-util>=2.0.0
24
24
  Requires-Dist: PyGithub
25
25
  Requires-Dist: requirements-parser
26
26
  Requires-Dist: defusedxml
27
27
  Requires-Dist: packageurl-python
28
+ Requires-Dist: igraph
29
+ Requires-Dist: matplotlib
28
30
 
29
31
  <!--
30
32
  Copyright (c) 2021 LG Electronics
@@ -0,0 +1,36 @@
1
+ fosslight_dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ fosslight_dependency/_analyze_dependency.py,sha256=gwdOrwn31sI9Fk5_ZBBbryA1-hCfHdtfqS8QePF7poo,4064
3
+ fosslight_dependency/_graph_convertor.py,sha256=D8GwmJfuj9Wg3_DeKRPLGGdyHSLcoU2Q0VzKQbkJG4g,2267
4
+ fosslight_dependency/_help.py,sha256=EG-ojJ3Fyn3iYrd_4mGtyMLMefOqf7_AF21q3-jf2Y8,3258
5
+ fosslight_dependency/_package_manager.py,sha256=_wwyTWSe8fKyMpFZh1BnhjTMAPG-5adhjBLqaxbdjZE,17154
6
+ fosslight_dependency/constant.py,sha256=1mJGu1SYyxVKo0W_pCIt-ANp52E_I5ovXFvpl2OMmjU,1039
7
+ fosslight_dependency/dependency_item.py,sha256=wNLWcsNycf3HQ5Pib2WrMeo2dn0eHCRg20NLcL95Qew,3345
8
+ fosslight_dependency/run_dependency_scanner.py,sha256=aYyMFNpk76L6cKStgnV2aPxACAgsEx676UH48EE9_WU,15859
9
+ fosslight_dependency/LICENSES/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
10
+ fosslight_dependency/LICENSES/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
11
+ fosslight_dependency/package_manager/Android.py,sha256=0UZFvbLxDIreerK4fR316YPyhUpPliV_kfZulrxkUyo,3218
12
+ fosslight_dependency/package_manager/Carthage.py,sha256=qCHH6bhdowgPR5mS89AQLl_0Z5LRoyMZU4vAVHzPNCM,6390
13
+ fosslight_dependency/package_manager/Cocoapods.py,sha256=k_URV1ekMOU8l_y9_KIp_luu96ZGOl1xLIkH737VREA,8524
14
+ fosslight_dependency/package_manager/Go.py,sha256=O-6DTTRM2EoTpCVmlIPKFy8ZTz64EHTooOAoUimjeyk,6491
15
+ fosslight_dependency/package_manager/Gradle.py,sha256=IYmj9q3XiE_DPKdtll6lyRr98lFuyKWW2qz57X26Fn0,4359
16
+ fosslight_dependency/package_manager/Helm.py,sha256=ucx2Y0tWX37UHIzIGaRyTe7uQ2vlu2nUuO09hOMq9ZU,4223
17
+ fosslight_dependency/package_manager/Maven.py,sha256=JXiP8LwQZ10tf1l0Qgd4fvmv1RcVn52_PiMx6sTpSKo,10329
18
+ fosslight_dependency/package_manager/Npm.py,sha256=hwKC08m05KlHgfQpPX7lnDEJC-A7WKF9OniYW4n9TDM,10638
19
+ fosslight_dependency/package_manager/Nuget.py,sha256=FGD5tV1mTBl3G9mxWWnoMwLZUiSW7VCcHS7FxhCqU1g,9334
20
+ fosslight_dependency/package_manager/Pub.py,sha256=-cotOpPCmLMmLWwP0dF1hQ44CBzConjnDpJ1So0n7lo,9904
21
+ fosslight_dependency/package_manager/Pypi.py,sha256=7eBB5ko4HhRhby5txo9NXZl6td1O_8k11v8R9FwxygU,16254
22
+ fosslight_dependency/package_manager/Swift.py,sha256=Lw5kaubDlKIQjSHC5gZik4WfWBliMx8n6XW2vVPhd84,6700
23
+ fosslight_dependency/package_manager/Unity.py,sha256=LoyWCMa6R3x0VCsTH1EEJ7FQmYsraCDnoHZUHCmYeiU,4708
24
+ fosslight_dependency/package_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ fosslight_dependency/third_party/askalono/askalono.exe,sha256=NyngElHbrg3zLFRVwn6fPDZE_EDAEb1N8tiwWoCm4pQ,4743680
26
+ fosslight_dependency/third_party/askalono/askalono_macos,sha256=cYSNXhAQpkdd8lkgnY5skNeDmU_8DIuP84eFi0OXKkE,5589868
27
+ fosslight_dependency/third_party/nomos/nomossa,sha256=oFF9I-fhug6AVNyFnWeVXwDRin6NWSvk1g7mHBotB3Q,866408
28
+ fosslight_dependency-4.0.0.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
29
+ fosslight_dependency-4.0.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
+ fosslight_dependency-4.0.0.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
31
+ fosslight_dependency-4.0.0.dist-info/METADATA,sha256=c2dISBev5GNBVXNPy_Og51Lcl7GtfHBU7PcAwftfXVo,4844
32
+ fosslight_dependency-4.0.0.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
33
+ fosslight_dependency-4.0.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
34
+ fosslight_dependency-4.0.0.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
35
+ fosslight_dependency-4.0.0.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
36
+ fosslight_dependency-4.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,34 +0,0 @@
1
- fosslight_dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- fosslight_dependency/_analyze_dependency.py,sha256=5xR9EQxeI1u57Gp8Tw0YEhCc6T7kckTJ60h40mLGsEU,4010
3
- fosslight_dependency/_help.py,sha256=j7d-SlarBNfTW4cHoHoGb5mu-NoNpZ4f5l7Kw99rLzA,2906
4
- fosslight_dependency/_package_manager.py,sha256=YM-jFwRpHxjUScbefBQYn16DVPLNzGi8h3HL3oT56cM,17614
5
- fosslight_dependency/constant.py,sha256=1mJGu1SYyxVKo0W_pCIt-ANp52E_I5ovXFvpl2OMmjU,1039
6
- fosslight_dependency/run_dependency_scanner.py,sha256=LMaUlFl_-qVhCmAaOSvYy2IUi0snrSVoWIGxR4YAi-g,15240
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=9vO3JDRAV2-ZGfjk4sGSqY05nszulwGwehvf7saNIMY,3178
10
- fosslight_dependency/package_manager/Carthage.py,sha256=OZL0ssKvN6pze0VohZ-kMeM-g-V7f5VqumpEh3o3t-U,6106
11
- fosslight_dependency/package_manager/Cocoapods.py,sha256=SgWG1wdprNKxBiCPvMfS2yDiPqz-ZgUK2T8C3SI3JcI,8337
12
- fosslight_dependency/package_manager/Go.py,sha256=pbhYWs6ZsU77m0LIobx0pGXbF9c19fADyTG8ZoDJkWI,6272
13
- fosslight_dependency/package_manager/Gradle.py,sha256=EQAGF_ohu2uB1uqk3itdO9vGhS5nKyPlomlbwbcVvYE,4203
14
- fosslight_dependency/package_manager/Helm.py,sha256=FjzQilY3GJyX8thwMGY_Rr12kw-dbehxVk6jIJNb2-M,4024
15
- fosslight_dependency/package_manager/Maven.py,sha256=-cS3DSFARE9rR0XtBVGvCv6JkmYYRjLtRAmn4TeIY1M,10282
16
- fosslight_dependency/package_manager/Npm.py,sha256=uuIS0lC8LpKTs8A0fG4mhJfpGno_hMugGW8ss5M_mMI,10395
17
- fosslight_dependency/package_manager/Nuget.py,sha256=j1zdLykGA6HcvGtdn8Kz1AZZmvK7iKxUERKWBNCfSp0,8948
18
- fosslight_dependency/package_manager/Pub.py,sha256=7HlvFu7HXaSDF1_VjFUAM1O4pz1DutbNwNzmzldyLbA,9763
19
- fosslight_dependency/package_manager/Pypi.py,sha256=hqhvsHwRqcM8bDUNJ6u8LTtEnMSUsRmVLllXZ793w_w,16046
20
- fosslight_dependency/package_manager/Swift.py,sha256=9r19lSmpFjeOsYcBkvMhgFfFZ4pL4j32YvCFLWWc8Fs,6489
21
- fosslight_dependency/package_manager/Unity.py,sha256=vGWtAHNtSkU8PxqKhoJNFFcUmNM2NJGRLwBmzeA21Sg,4353
22
- fosslight_dependency/package_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- fosslight_dependency/third_party/askalono/askalono.exe,sha256=NyngElHbrg3zLFRVwn6fPDZE_EDAEb1N8tiwWoCm4pQ,4743680
24
- fosslight_dependency/third_party/askalono/askalono_macos,sha256=cYSNXhAQpkdd8lkgnY5skNeDmU_8DIuP84eFi0OXKkE,5589868
25
- fosslight_dependency/third_party/nomos/nomossa,sha256=oFF9I-fhug6AVNyFnWeVXwDRin6NWSvk1g7mHBotB3Q,866408
26
- fosslight_dependency-3.15.5.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
- fosslight_dependency-3.15.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
28
- fosslight_dependency-3.15.5.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
29
- fosslight_dependency-3.15.5.dist-info/METADATA,sha256=nAaxfZdJDlqV2cBCCaWRmo_DZXtVY0C8LHtP9B7LuGM,4799
30
- fosslight_dependency-3.15.5.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
31
- fosslight_dependency-3.15.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
32
- fosslight_dependency-3.15.5.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
33
- fosslight_dependency-3.15.5.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
34
- fosslight_dependency-3.15.5.dist-info/RECORD,,