fosslight-dependency 4.1.6__py3-none-any.whl → 4.1.8__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 (21) hide show
  1. fosslight_dependency/_package_manager.py +36 -92
  2. fosslight_dependency/package_manager/Carthage.py +4 -6
  3. fosslight_dependency/package_manager/Maven.py +3 -2
  4. fosslight_dependency/package_manager/Nuget.py +6 -10
  5. fosslight_dependency/package_manager/Pub.py +2 -5
  6. fosslight_dependency/package_manager/Pypi.py +3 -8
  7. fosslight_dependency/package_manager/Swift.py +1 -1
  8. fosslight_dependency/package_manager/Unity.py +22 -8
  9. fosslight_dependency/run_dependency_scanner.py +51 -30
  10. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/METADATA +3 -3
  11. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/RECORD +18 -21
  12. fosslight_dependency/third_party/askalono/askalono.exe +0 -0
  13. fosslight_dependency/third_party/askalono/askalono_macos +0 -0
  14. fosslight_dependency/third_party/nomos/nomossa +0 -0
  15. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/Apache-2.0.txt +0 -0
  16. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/LICENSE +0 -0
  17. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/LicenseRef-3rd_party_licenses.txt +0 -0
  18. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/MIT.txt +0 -0
  19. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/WHEEL +0 -0
  20. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/entry_points.txt +0 -0
  21. {fosslight_dependency-4.1.6.dist-info → fosslight_dependency-4.1.8.dist-info}/top_level.txt +0 -0
@@ -4,16 +4,17 @@
4
4
  # SPDX-License-Identifier: Apache-2.0
5
5
 
6
6
  import os
7
- import sys
8
7
  import logging
9
8
  import platform
10
9
  import re
11
10
  import base64
12
11
  import subprocess
13
12
  import shutil
13
+ import stat
14
+ from packageurl.contrib import url2purl
15
+ from askalono import identify
14
16
  import fosslight_util.constant as constant
15
17
  import fosslight_dependency.constant as const
16
- from packageurl.contrib import url2purl
17
18
 
18
19
  try:
19
20
  from github import Github
@@ -22,13 +23,9 @@ except Exception:
22
23
 
23
24
  logger = logging.getLogger(constant.LOGGER_NAME)
24
25
 
25
- # binary url to check license text
26
- _license_scanner_linux = os.path.join('third_party', 'nomos', 'nomossa')
27
- _license_scanner_macos = os.path.join('third_party', 'askalono', 'askalono_macos')
28
- _license_scanner_windows = os.path.join('third_party', 'askalono', 'askalono.exe')
29
-
30
26
  gradle_config = ['runtimeClasspath', 'runtime']
31
27
  android_config = ['releaseRuntimeClasspath']
28
+ ASKALONO_THRESHOLD = 0.7
32
29
 
33
30
 
34
31
  class PackageManager:
@@ -53,7 +50,6 @@ class PackageManager:
53
50
  self.dep_items = []
54
51
 
55
52
  self.platform = platform.system()
56
- self.license_scanner_bin = check_license_scanner(self.platform)
57
53
 
58
54
  def __del__(self):
59
55
  self.input_package_list_file = []
@@ -112,10 +108,11 @@ class PackageManager:
112
108
  cmd_gradle = "./gradlew"
113
109
  else:
114
110
  ret_task = False
115
- logger.warning('No gradlew file exists. (skip to find dependencies relationship.')
111
+ logger.warning('No gradlew file exists (Skip to find dependencies relationship.).')
116
112
  if ret_plugin:
117
113
  logger.warning('Also it cannot run android-dependency-scanning plugin.')
118
114
  if ret_task:
115
+ current_mode = change_file_mode(cmd_gradle)
119
116
  if ret_alldeps:
120
117
  cmd = f"{cmd_gradle} allDeps"
121
118
  try:
@@ -124,11 +121,10 @@ class PackageManager:
124
121
  self.parse_dependency_tree(ret)
125
122
  else:
126
123
  self.set_direct_dependencies(False)
127
- logger.warning("Failed to run allDeps task.")
124
+ logger.warning(f"Fail to run {cmd}")
128
125
  except Exception as e:
129
126
  self.set_direct_dependencies(False)
130
- logger.error(f'Fail to run {cmd}: {e}')
131
- logger.warning('It cannot print the direct/transitive dependencies relationship.')
127
+ logger.warning(f"Cannot print 'depends on' information. (fail {cmd}: {e})")
132
128
 
133
129
  if ret_plugin:
134
130
  cmd = f"{cmd_gradle} generateLicenseTxt"
@@ -145,6 +141,7 @@ class PackageManager:
145
141
  except Exception as e:
146
142
  logger.error(f'Fail to run {cmd}: {e}')
147
143
  ret_task = False
144
+ change_file_mode(cmd_gradle, current_mode)
148
145
 
149
146
  if os.path.isfile(gradle_backup):
150
147
  os.remove(const.SUPPORT_PACKAE.get(self.package_manager_name))
@@ -154,6 +151,9 @@ class PackageManager:
154
151
  if os.path.isfile(module_gradle_backup):
155
152
  os.remove(module_build_gradle)
156
153
  shutil.move(module_gradle_backup, module_build_gradle)
154
+ if os.path.isfile(self.input_file_name):
155
+ logger.info(f'Found {self.input_file_name}, skip to run plugin.')
156
+ ret_task = True
157
157
  return ret_task
158
158
 
159
159
  def add_android_plugin_in_gradle(self, module_build_gradle):
@@ -313,9 +313,8 @@ def connect_github(github_token):
313
313
  return g
314
314
 
315
315
 
316
- def get_github_license(g, github_repo, platform, license_scanner_bin):
316
+ def get_github_license(g, github_repo):
317
317
  license_name = ''
318
- tmp_license_txt_file_name = 'tmp_license.txt'
319
318
 
320
319
  try:
321
320
  repository = g.get_repo(github_repo)
@@ -331,94 +330,39 @@ def get_github_license(g, github_repo, platform, license_scanner_bin):
331
330
  if license_name == "" or license_name == "NOASSERTION":
332
331
  try:
333
332
  license_txt_data = base64.b64decode(repository.get_license().content).decode('utf-8')
334
- tmp_license_txt = open(tmp_license_txt_file_name, 'w', encoding='utf-8')
335
- tmp_license_txt.write(license_txt_data)
336
- tmp_license_txt.close()
337
- license_name = check_and_run_license_scanner(platform, license_scanner_bin, tmp_license_txt_file_name)
333
+ license_name = check_license_name(license_txt_data)
338
334
  except Exception:
339
- logger.info("Cannot find the license name with license scanner binary.")
340
-
341
- if os.path.isfile(tmp_license_txt_file_name):
342
- os.remove(tmp_license_txt_file_name)
335
+ logger.info("Cannot find the license name with askalono.")
343
336
  except Exception:
344
337
  logger.info("Cannot find the license name with github api.")
345
338
 
346
339
  return license_name
347
340
 
348
341
 
349
- def check_license_scanner(platform):
350
- license_scanner_bin = ''
351
-
352
- if platform == const.LINUX:
353
- license_scanner = _license_scanner_linux
354
- elif platform == const.MACOS:
355
- license_scanner = _license_scanner_macos
356
- elif platform == const.WINDOWS:
357
- license_scanner = _license_scanner_windows
342
+ def check_license_name(license_txt, is_filepath=False):
343
+ license_name = ''
344
+ if is_filepath:
345
+ with open(license_txt, 'r', encoding='utf-8') as f:
346
+ license_content = f.read()
358
347
  else:
359
- logger.debug("Not supported OS to analyze license text with binary.")
348
+ license_content = license_txt
360
349
 
361
- if license_scanner:
362
- try:
363
- base_path = sys._MEIPASS
364
- except Exception:
365
- base_path = os.path.dirname(__file__)
366
-
367
- data_path = os.path.join(base_path, license_scanner)
368
- license_scanner_bin = data_path
369
-
370
- return license_scanner_bin
371
-
372
-
373
- def check_and_run_license_scanner(platform, license_scanner_bin, file_dir):
374
- license_name = ''
350
+ detect_askalono = identify(license_content)
351
+ if detect_askalono.score > ASKALONO_THRESHOLD:
352
+ license_name = detect_askalono.name
353
+ return license_name
375
354
 
376
- if not license_scanner_bin:
377
- logger.error('Not supported OS for license scanner binary.')
378
355
 
379
- try:
380
- tmp_output_file_name = "tmp_license_scanner_output.txt"
356
+ def change_file_mode(filepath, mode=''):
357
+ current_mode = os.stat(filepath).st_mode
381
358
 
382
- if file_dir == "UNKNOWN":
383
- license_name = ""
359
+ if not os.path.exists(filepath):
360
+ logger.debug(f"The file{filepath} does not exist.")
361
+ else:
362
+ if not mode:
363
+ new_mode = current_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
384
364
  else:
385
- if platform == const.LINUX:
386
- run_license_scanner = f"{license_scanner_bin} {file_dir} > {tmp_output_file_name}"
387
- elif platform == const.MACOS:
388
- run_license_scanner = f"{license_scanner_bin} identify {file_dir} > {tmp_output_file_name}"
389
- elif platform == const.WINDOWS:
390
- run_license_scanner = f"{license_scanner_bin} identify {file_dir} > {tmp_output_file_name}"
391
- else:
392
- run_license_scanner = ''
393
-
394
- if run_license_scanner is None:
395
- license_name = ""
396
- return license_name
397
- else:
398
- ret = subprocess.run(run_license_scanner, shell=True, stderr=subprocess.PIPE)
399
- if ret.returncode != 0 or ret.stderr:
400
- os.remove(tmp_output_file_name)
401
- return ""
402
-
403
- fp = open(tmp_output_file_name, "r", encoding='utf8')
404
- license_output = fp.read()
405
- fp.close()
406
-
407
- if platform == const.LINUX:
408
- license_output_re = re.findall(r'.*contains license\(s\)\s(.*)', license_output)
409
- else:
410
- license_output_re = re.findall(r"License:\s{1}(\S*)\s{1}", license_output)
411
-
412
- if len(license_output_re) == 1:
413
- license_name = license_output_re[0]
414
- if license_name == "No_license_found":
415
- license_name = ""
416
- else:
417
- license_name = ""
418
- os.remove(tmp_output_file_name)
419
-
420
- except Exception as ex:
421
- logger.error(f"Failed to run license scan binary. {ex}")
422
- license_name = ""
423
-
424
- return license_name
365
+ new_mode = mode
366
+ os.chmod(filepath, new_mode)
367
+ logger.debug(f"File mode of {filepath} has been changed to {oct(new_mode)}.")
368
+ return current_mode
@@ -9,8 +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, get_github_license, check_and_run_license_scanner
13
- from fosslight_dependency._package_manager import get_url_to_purl
12
+ from fosslight_dependency._package_manager import connect_github, get_github_license
13
+ from fosslight_dependency._package_manager import get_url_to_purl, check_license_name
14
14
  from fosslight_dependency.dependency_item import DependencyItem
15
15
  from fosslight_util.oss_item import OssItem
16
16
 
@@ -79,9 +79,7 @@ class Carthage(PackageManager):
79
79
  for license_file_reg in license_file_regs:
80
80
  match_result = re.match(license_file_reg, filename_in_dir.lower())
81
81
  if match_result is not None:
82
- license_name = check_and_run_license_scanner(self.platform,
83
- self.license_scanner_bin,
84
- filename_with_checkout_path)
82
+ license_name = check_license_name(filename_with_checkout_path, True)
85
83
  find_license = True
86
84
  break
87
85
  if license_name == '':
@@ -89,7 +87,7 @@ class Carthage(PackageManager):
89
87
  try:
90
88
  if not g:
91
89
  g = connect_github(self.github_token)
92
- license_name = get_github_license(g, oss_path, self.platform, self.license_scanner_bin)
90
+ license_name = get_github_license(g, oss_path)
93
91
  except Exception as e:
94
92
  logger.warning(f"Failed to get license with github api: {e}")
95
93
  license_name == ''
@@ -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, get_url_to_purl
16
+ from fosslight_dependency._package_manager import version_refine, get_url_to_purl, change_file_mode
17
17
  from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
18
18
  from fosslight_util.oss_item import OssItem
19
19
 
@@ -142,7 +142,7 @@ class Maven(PackageManager):
142
142
  else:
143
143
  cmd_mvn = "mvn"
144
144
  cmd = f"{cmd_mvn} license:aggregate-download-licenses"
145
-
145
+ current_mode = change_file_mode(cmd_mvn)
146
146
  ret = subprocess.call(cmd, shell=True)
147
147
  if ret != 0:
148
148
  logger.error(f"Failed to run maven plugin: {cmd}")
@@ -159,6 +159,7 @@ class Maven(PackageManager):
159
159
  except Exception as e:
160
160
  logger.error(f"Failed to run '{cmd}': {e}")
161
161
  self.set_direct_dependencies(False)
162
+ change_file_mode(cmd_mvn, current_mode)
162
163
 
163
164
  def create_dep_stack(self, dep_line):
164
165
  dep_stack = []
@@ -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, get_url_to_purl
15
+ from fosslight_dependency._package_manager import check_license_name, get_url_to_purl
16
16
  from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
17
17
  from fosslight_util.oss_item import OssItem
18
18
 
@@ -54,7 +54,8 @@ class Nuget(PackageManager):
54
54
  oss_item.version = oss_version
55
55
 
56
56
  license_name = ''
57
- response = requests.get(f'{self.nuget_api_url}{oss_origin_name}/{oss_item.version}/{oss_origin_name}.nuspec')
57
+ response = requests.get(f'{self.nuget_api_url.lower()}{oss_origin_name.lower()}/ \
58
+ {oss_item.version.lower()}/{oss_origin_name.lower()}.nuspec')
58
59
  if response.status_code == 200:
59
60
  root = fromstring(response.text)
60
61
  xmlns = ''
@@ -73,14 +74,9 @@ class Nuget(PackageManager):
73
74
  if license_url is not None:
74
75
  url_res = requests.get(license_url.text)
75
76
  if url_res.status_code == 200:
76
- tmp_license_txt = open(tmp_license_txt_file_name, 'w', encoding='utf-8')
77
- tmp_license_txt.write(url_res.text)
78
- tmp_license_txt.close()
79
- license_name_with_license_scanner = check_and_run_license_scanner(self.platform,
80
- self.license_scanner_bin,
81
- tmp_license_txt_file_name)
82
- if license_name_with_license_scanner != "":
83
- license_name = license_name_with_license_scanner
77
+ license_name_with_scanner = check_license_name(url_res.text)
78
+ if license_name_with_scanner != "":
79
+ license_name = license_name_with_scanner
84
80
  else:
85
81
  license_name = license_url.text
86
82
  oss_item.license = license_name
@@ -10,11 +10,10 @@ import re
10
10
  import shutil
11
11
  import yaml
12
12
  import subprocess
13
- from askalono import identify
14
13
  import fosslight_util.constant as constant
15
14
  import fosslight_dependency.constant as const
16
15
  from fosslight_dependency._package_manager import PackageManager
17
- from fosslight_dependency._package_manager import get_url_to_purl
16
+ from fosslight_dependency._package_manager import get_url_to_purl, check_license_name
18
17
  from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
19
18
  from fosslight_util.oss_item import OssItem
20
19
 
@@ -135,9 +134,7 @@ class Pub(PackageManager):
135
134
  purl_dict[f'{oss_origin_name}({oss_item.version})'] = dep_item.purl
136
135
  license_txt = json_data['license']
137
136
  if license_txt is not None:
138
- detect_askalono = identify(license_txt)
139
- if detect_askalono.score > 0.7:
140
- oss_item.license = detect_askalono.name
137
+ oss_item.license = check_license_name(license_txt)
141
138
 
142
139
  if self.direct_dep:
143
140
  if oss_origin_name not in self.total_dep_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 check_and_run_license_scanner, get_url_to_purl
16
+ from fosslight_dependency._package_manager import check_license_name, get_url_to_purl
17
17
  from fosslight_dependency.dependency_item import DependencyItem, change_dependson_to_purl
18
18
  from fosslight_util.oss_item import OssItem
19
19
 
@@ -111,7 +111,7 @@ class Pypi(PackageManager):
111
111
  install_cmd = cmd_separator.join(install_cmd_list)
112
112
  else:
113
113
  logger.error(const.SUPPORT_PACKAE[self.package_manager_name])
114
- logger.error('Cannot create virtualenv becuase it cannot find: '
114
+ logger.error('Cannot create virtualenv because it cannot find: '
115
115
  + ', '.join(const.SUPPORT_PACKAE[self.package_manager_name]))
116
116
  logger.error("Please run with '-a' and '-d' option.")
117
117
  return False
@@ -302,12 +302,7 @@ class Pypi(PackageManager):
302
302
  if license_name is not None:
303
303
  license_name = license_name.replace(';', ',')
304
304
  else:
305
- license_file_dir = d['LicenseFile']
306
- license_name_with_lic_scanner = check_and_run_license_scanner(self.platform,
307
- self.license_scanner_bin,
308
- license_file_dir)
309
- if license_name_with_lic_scanner != "":
310
- license_name = license_name_with_lic_scanner
305
+ license_name = check_license_name(d['LicenseFile'], True)
311
306
  oss_item.license = license_name
312
307
 
313
308
  if oss_init_name == self.package_name:
@@ -140,7 +140,7 @@ class Swift(PackageManager):
140
140
  github_repo = "/".join(oss_item.homepage.split('/')[-2:])
141
141
  dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name, github_repo, oss_item.version)
142
142
  purl_dict[f'{oss_origin_name}({oss_item.version})'] = dep_item.purl
143
- oss_item.license = get_github_license(g, github_repo, self.platform, self.license_scanner_bin)
143
+ oss_item.license = get_github_license(g, github_repo)
144
144
 
145
145
  if self.direct_dep and len(self.direct_dep_list) > 0:
146
146
  if oss_origin_name in self.direct_dep_list:
@@ -7,16 +7,16 @@ import os
7
7
  import logging
8
8
  import re
9
9
  import yaml
10
+ import requests
10
11
  import fosslight_util.constant as constant
11
12
  import fosslight_dependency.constant as const
12
13
  from fosslight_dependency._package_manager import PackageManager
13
- from fosslight_dependency._package_manager import check_and_run_license_scanner, get_url_to_purl
14
+ from fosslight_dependency._package_manager import check_license_name, get_url_to_purl
14
15
  from fosslight_dependency.dependency_item import DependencyItem
15
16
  from fosslight_util.oss_item import OssItem
16
17
 
17
18
  logger = logging.getLogger(constant.LOGGER_NAME)
18
19
  proprietary_license = 'Proprietary License'
19
- unclassifed_license = 'UnclassifiedLicense'
20
20
  license_md = 'LICENSE.md'
21
21
  third_party_md = 'Third Party Notices.md'
22
22
 
@@ -49,10 +49,8 @@ class Unity(PackageManager):
49
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
- license_name = check_and_run_license_scanner(self.platform,
53
- self.license_scanner_bin,
54
- license_f)
55
- if license_name == unclassifed_license or license_name == '':
52
+ license_name = check_license_name(license_f, True)
53
+ if license_name == '':
56
54
  with open(license_f, 'r', encoding='utf-8') as f:
57
55
  for line in f:
58
56
  matched_l = re.search(r'Unity\s[\s\w]*\sLicense', line)
@@ -76,11 +74,14 @@ class Unity(PackageManager):
76
74
  if oss_item.homepage and oss_item.homepage.startswith('git@'):
77
75
  oss_item.homepage = oss_item.homepage.replace('git@', 'https://')
78
76
  if oss_item.homepage is None or oss_item.homepage.startswith(self.unity_internal_url):
79
- if license_name != proprietary_license:
77
+ if (license_name != proprietary_license) and license_name != '':
80
78
  oss_item.homepage = f'{self.mirror_url}{oss_item.name}'
81
79
  if oss_item.homepage is None:
82
80
  oss_item.homepage = ''
83
-
81
+ else:
82
+ if not check_url_alive(oss_item.homepage):
83
+ minor_version = '.'.join(oss_item.version.split('.')[0:2])
84
+ oss_item.homepage = f'https://docs.unity3d.com/Packages/{oss_item.name}@{minor_version}'
84
85
  oss_item.download_location = oss_item.homepage
85
86
  dep_item.purl = get_url_to_purl(oss_item.download_location, self.package_manager_name)
86
87
  if dep_item.purl == 'None':
@@ -102,3 +103,16 @@ class Unity(PackageManager):
102
103
  logger.error(f"Fail to parse unity oss information: {e}")
103
104
 
104
105
  return
106
+
107
+
108
+ def check_url_alive(url):
109
+ alive = False
110
+ try:
111
+ response = requests.get(url)
112
+ if response.status_code == 200:
113
+ alive = True
114
+ else:
115
+ logger.debug(f"{url} returned status code {response.status_code}")
116
+ except requests.exceptions.RequestException as e:
117
+ logger.debug(f"Check if url({url})is alive err: {e}")
118
+ return alive
@@ -51,17 +51,17 @@ def paginate_file(file_path):
51
51
  input("Press Enter to see the next page...")
52
52
 
53
53
 
54
- def find_package_manager(input_dir, abs_path_to_exclude=[]):
54
+ def find_package_manager(input_dir, abs_path_to_exclude=[], manifest_file_name=[]):
55
55
  ret = True
56
- manifest_file_name = []
57
- for value in const.SUPPORT_PACKAE.values():
58
- if isinstance(value, list):
59
- manifest_file_name.extend(value)
60
- else:
61
- manifest_file_name.append(value)
56
+ if not manifest_file_name:
57
+ for value in const.SUPPORT_PACKAE.values():
58
+ if isinstance(value, list):
59
+ manifest_file_name.extend(value)
60
+ else:
61
+ manifest_file_name.append(value)
62
62
 
63
63
  found_manifest_file = []
64
- for (parent, _, files) in os.walk(input_dir):
64
+ for parent, dirs, files in os.walk(input_dir):
65
65
  if len(files) < 1:
66
66
  continue
67
67
  if os.path.basename(parent) in _exclude_dir:
@@ -76,6 +76,13 @@ def find_package_manager(input_dir, abs_path_to_exclude=[]):
76
76
  continue
77
77
  if file in manifest_file_name:
78
78
  found_manifest_file.append(file)
79
+ for dir in dirs:
80
+ for manifest_f in manifest_file_name:
81
+ manifest_l = manifest_f.split(os.path.sep)
82
+ if len(manifest_l) > 1:
83
+ if manifest_l[0] == dir:
84
+ if os.path.exists(os.path.join(parent, manifest_f)):
85
+ found_manifest_file.append(manifest_f)
79
86
  if len(found_manifest_file) > 0:
80
87
  input_dir = parent
81
88
  break
@@ -99,7 +106,7 @@ def find_package_manager(input_dir, abs_path_to_exclude=[]):
99
106
  logger.warning(f"### Set Package Manager = {', '.join(found_package_manager.keys())}")
100
107
  else:
101
108
  ret = False
102
- logger.info("It cannot find the manifest file.")
109
+ logger.info("Cannot find the manifest file.")
103
110
 
104
111
  return ret, found_package_manager, input_dir
105
112
 
@@ -168,17 +175,6 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
168
175
  logger.error(msg)
169
176
  return False, scan_item
170
177
 
171
- autodetect = True
172
- if package_manager:
173
- autodetect = False
174
- support_packagemanager = list(const.SUPPORT_PACKAE.keys())
175
-
176
- if package_manager not in support_packagemanager:
177
- logger.error(f"(-m option) You entered the unsupported package manager({package_manager}).")
178
- logger.error("Please enter the supported package manager({0}) with '-m' option."
179
- .format(", ".join(support_packagemanager)))
180
- return False, scan_item
181
-
182
178
  if input_dir:
183
179
  if os.path.isdir(input_dir):
184
180
  os.chdir(input_dir)
@@ -192,20 +188,44 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
192
188
  os.chdir(input_dir)
193
189
  scan_item.set_cover_pathinfo(input_dir, path_to_exclude)
194
190
 
191
+ autodetect = True
195
192
  found_package_manager = {}
196
- if autodetect:
197
- try:
198
- ret, found_package_manager, input_dir = find_package_manager(input_dir, abs_path_to_exclude)
193
+ if package_manager:
194
+ autodetect = False
195
+ support_packagemanager = list(const.SUPPORT_PACKAE.keys())
196
+
197
+ if package_manager not in support_packagemanager:
198
+ logger.error(f"(-m option) You entered the unsupported package manager({package_manager}).")
199
+ logger.error("Please enter the supported package manager({0}) with '-m' option."
200
+ .format(", ".join(support_packagemanager)))
201
+ return False, scan_item
202
+ manifest_file_name = []
203
+ value = const.SUPPORT_PACKAE[package_manager]
204
+ if isinstance(value, list):
205
+ manifest_file_name.extend(value)
206
+ else:
207
+ manifest_file_name.append(value)
208
+ scan_item.set_cover_comment(f"Manual detect mode (-m {package_manager})")
209
+ else:
210
+ manifest_file_name = []
211
+
212
+ try:
213
+ ret, found_package_manager, input_dir = find_package_manager(input_dir, abs_path_to_exclude, manifest_file_name)
214
+ if ret:
199
215
  os.chdir(input_dir)
200
- except Exception as e:
216
+ except Exception as e:
217
+ if autodetect:
201
218
  logger.error(f'Fail to find package manager: {e}')
202
219
  ret = False
203
- finally:
204
- if not ret:
205
- logger.warning("Dependency scanning terminated because the package manager was not found.")
220
+ finally:
221
+ if not ret:
222
+ if not autodetect:
223
+ logger.info('Try to analyze dependency without manifest file. (Manual mode)')
224
+ found_package_manager[package_manager] = []
225
+ else:
226
+ logger.error("Terminated: package manager could not be found.")
206
227
  ret = False
207
- else:
208
- found_package_manager[package_manager] = ["manual detect ('-m option')"]
228
+ return False, scan_item
209
229
 
210
230
  pass_key = 'PASS'
211
231
  success_pm = []
@@ -242,7 +262,8 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
242
262
  'and https://fosslight.org/fosslight-guide-en/scanner/3_dependency.html#-prerequisite.'
243
263
  scan_item.set_cover_comment(f"Analysis failed Package manager: {', '.join(fail_pm)} ({info_msg})")
244
264
  else:
245
- scan_item.set_cover_comment("No Package manager detected.")
265
+ if autodetect:
266
+ scan_item.set_cover_comment("No Package manager detected.")
246
267
 
247
268
  if ret and graph_path:
248
269
  graph_path = os.path.abspath(graph_path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-dependency
3
- Version: 4.1.6
3
+ Version: 4.1.8
4
4
  Summary: FOSSLight Dependency Scanner
5
5
  Home-page: https://github.com/fosslight/fosslight_dependency_scanner
6
6
  Author: LG Electronics
@@ -9,10 +9,10 @@ Download-URL: https://github.com/fosslight/fosslight_dependency_scanner
9
9
  Platform: UNKNOWN
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.6
13
- Classifier: Programming Language :: Python :: 3.7
14
12
  Classifier: Programming Language :: Python :: 3.8
15
13
  Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
16
  Description-Content-Type: text/markdown
17
17
  Requires-Dist: openpyxl
18
18
  Requires-Dist: beautifulsoup4
@@ -2,36 +2,33 @@ fosslight_dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
2
2
  fosslight_dependency/_analyze_dependency.py,sha256=uYbHDlFfEf-LsCWc6hTKN-QCD1T_2jaEgBf3z4M_4Lk,4226
3
3
  fosslight_dependency/_graph_convertor.py,sha256=D8GwmJfuj9Wg3_DeKRPLGGdyHSLcoU2Q0VzKQbkJG4g,2267
4
4
  fosslight_dependency/_help.py,sha256=INeP24fFfV2HPhZJMqk_KCu08X7nneAumBqMWQ7Sbw8,3336
5
- fosslight_dependency/_package_manager.py,sha256=TDYP0tlqr7A346BoC2EKEZSq7Eua2cWdJQ5YvMIc9Wc,17265
5
+ fosslight_dependency/_package_manager.py,sha256=GUqMLidGGVrek0XpApron3SWFf66VsmfycsmnvxQOkY,14890
6
6
  fosslight_dependency/constant.py,sha256=FAkzrW1S6Ua_TAbvQ2y6d0dhEZcgonB11miKUj7lB98,1080
7
7
  fosslight_dependency/dependency_item.py,sha256=wNLWcsNycf3HQ5Pib2WrMeo2dn0eHCRg20NLcL95Qew,3345
8
- fosslight_dependency/run_dependency_scanner.py,sha256=HVee14Ol9QTjIKhDTVu0b3Shg43JQTQTV4NufbOhWHs,16471
8
+ fosslight_dependency/run_dependency_scanner.py,sha256=zFlHAwj9fhsiaut_VhvQneX8Ngz82xgau4ThmHxk8pI,17399
9
9
  fosslight_dependency/LICENSES/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
10
10
  fosslight_dependency/LICENSES/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
11
11
  fosslight_dependency/package_manager/Android.py,sha256=0UZFvbLxDIreerK4fR316YPyhUpPliV_kfZulrxkUyo,3218
12
12
  fosslight_dependency/package_manager/Cargo.py,sha256=I27IKtUFf2fOr9ZngB8T9x6pPYhpk1m5CxbwM1dw9rk,5898
13
- fosslight_dependency/package_manager/Carthage.py,sha256=qCHH6bhdowgPR5mS89AQLl_0Z5LRoyMZU4vAVHzPNCM,6390
13
+ fosslight_dependency/package_manager/Carthage.py,sha256=VU506KafUiHBrr_62iOOXNI1fDOreOQgcC2EWM5PpQo,6122
14
14
  fosslight_dependency/package_manager/Cocoapods.py,sha256=k_URV1ekMOU8l_y9_KIp_luu96ZGOl1xLIkH737VREA,8524
15
15
  fosslight_dependency/package_manager/Go.py,sha256=O-6DTTRM2EoTpCVmlIPKFy8ZTz64EHTooOAoUimjeyk,6491
16
16
  fosslight_dependency/package_manager/Gradle.py,sha256=IYmj9q3XiE_DPKdtll6lyRr98lFuyKWW2qz57X26Fn0,4359
17
17
  fosslight_dependency/package_manager/Helm.py,sha256=ucx2Y0tWX37UHIzIGaRyTe7uQ2vlu2nUuO09hOMq9ZU,4223
18
- fosslight_dependency/package_manager/Maven.py,sha256=JXiP8LwQZ10tf1l0Qgd4fvmv1RcVn52_PiMx6sTpSKo,10329
18
+ fosslight_dependency/package_manager/Maven.py,sha256=XDVTmxRjeQmATpJDP__yw47Pk5e4utXAkkEkskXPQCQ,10443
19
19
  fosslight_dependency/package_manager/Npm.py,sha256=hwKC08m05KlHgfQpPX7lnDEJC-A7WKF9OniYW4n9TDM,10638
20
- fosslight_dependency/package_manager/Nuget.py,sha256=FGD5tV1mTBl3G9mxWWnoMwLZUiSW7VCcHS7FxhCqU1g,9334
21
- fosslight_dependency/package_manager/Pub.py,sha256=ZsBSEyYkdIQCFCbc9OeAf5-hAw2oY_fA-KDvnVi9z_E,10299
22
- fosslight_dependency/package_manager/Pypi.py,sha256=7eBB5ko4HhRhby5txo9NXZl6td1O_8k11v8R9FwxygU,16254
23
- fosslight_dependency/package_manager/Swift.py,sha256=rAGecP705HJQGBQUj_4ssyty_lDF4YwTt7ymjso0-VQ,6793
24
- fosslight_dependency/package_manager/Unity.py,sha256=LoyWCMa6R3x0VCsTH1EEJ7FQmYsraCDnoHZUHCmYeiU,4708
20
+ fosslight_dependency/package_manager/Nuget.py,sha256=x1SPdxwXS2Oyi1RnLasvJJL-IFJl45VI2CXt3wReW24,8884
21
+ fosslight_dependency/package_manager/Pub.py,sha256=Rrz8_6wdrmMU6f3vbbuAwyMbODBauXNnBbI619OQgDk,10184
22
+ fosslight_dependency/package_manager/Pypi.py,sha256=A3pXJC_7H7PTa6i3B_PvJY85qsc6W9AqOze7kB8E3Ws,15831
23
+ fosslight_dependency/package_manager/Swift.py,sha256=8fdbdAXTNlp2NDoSqQXm48JGAg9UhxA91M1-NhHkT40,6752
24
+ fosslight_dependency/package_manager/Unity.py,sha256=n1006GZ6Qrk8wAdO6wla1Q-JD7Evin7REVj-HDeTARc,5142
25
25
  fosslight_dependency/package_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- fosslight_dependency/third_party/askalono/askalono.exe,sha256=NyngElHbrg3zLFRVwn6fPDZE_EDAEb1N8tiwWoCm4pQ,4743680
27
- fosslight_dependency/third_party/askalono/askalono_macos,sha256=cYSNXhAQpkdd8lkgnY5skNeDmU_8DIuP84eFi0OXKkE,5589868
28
- fosslight_dependency/third_party/nomos/nomossa,sha256=oFF9I-fhug6AVNyFnWeVXwDRin6NWSvk1g7mHBotB3Q,866408
29
- fosslight_dependency-4.1.6.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
- fosslight_dependency-4.1.6.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
31
- fosslight_dependency-4.1.6.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
32
- fosslight_dependency-4.1.6.dist-info/METADATA,sha256=gI4z5TG8NOQuKlFjhZRZAvgEUyi3FPNHJOz_Bb8Cjzw,4982
33
- fosslight_dependency-4.1.6.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
34
- fosslight_dependency-4.1.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
35
- fosslight_dependency-4.1.6.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
36
- fosslight_dependency-4.1.6.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
37
- fosslight_dependency-4.1.6.dist-info/RECORD,,
26
+ fosslight_dependency-4.1.8.dist-info/Apache-2.0.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ fosslight_dependency-4.1.8.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
28
+ fosslight_dependency-4.1.8.dist-info/LicenseRef-3rd_party_licenses.txt,sha256=EcsFt7aE1rp3OXAdJgmXayfOZdpRdBMcmRnyoqWMCsw,95687
29
+ fosslight_dependency-4.1.8.dist-info/METADATA,sha256=t5oEFJ8QBw9OduU3e6TB_IaeC4EcABk13D9D0mfO87Q,4984
30
+ fosslight_dependency-4.1.8.dist-info/MIT.txt,sha256=9cx4CbArgByWvkoEZNqpzbpJgA9TUe2D62rMocQpgfs,1082
31
+ fosslight_dependency-4.1.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
32
+ fosslight_dependency-4.1.8.dist-info/entry_points.txt,sha256=e1QZbnCrQvfbwe9L6PxXnkRZMhl-PSo0QyUes0dGjU8,91
33
+ fosslight_dependency-4.1.8.dist-info/top_level.txt,sha256=Jc0V7VcVCH0TEM8ksb8dwroTYz4AmRaQnlr3FB71Hcs,21
34
+ fosslight_dependency-4.1.8.dist-info/RECORD,,