fosslight-util 2.1.17__tar.gz → 2.1.19__tar.gz

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 (39) hide show
  1. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/PKG-INFO +1 -1
  2. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/requirements.txt +0 -1
  3. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/setup.py +1 -1
  4. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/_get_downloadable_url.py +41 -9
  5. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/constant.py +3 -1
  6. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/download.py +9 -2
  7. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util.egg-info/PKG-INFO +1 -1
  8. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util.egg-info/requires.txt +0 -1
  9. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/LICENSE +0 -0
  10. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/MANIFEST.in +0 -0
  11. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/README.md +0 -0
  12. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/setup.cfg +0 -0
  13. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/__init__.py +0 -0
  14. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/compare_yaml.py +0 -0
  15. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/correct.py +0 -0
  16. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/cover.py +0 -0
  17. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/exclude.py +0 -0
  18. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/help.py +0 -0
  19. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/oss_item.py +0 -0
  20. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/output_format.py +0 -0
  21. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/parsing_yaml.py +0 -0
  22. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/read_excel.py +0 -0
  23. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/resources/frequentLicenselist.json +0 -0
  24. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/resources/frequent_license_nick_list.json +0 -0
  25. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/resources/licenses.json +0 -0
  26. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/set_log.py +0 -0
  27. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/spdx_licenses.py +0 -0
  28. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/timer_thread.py +0 -0
  29. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_cyclonedx.py +0 -0
  30. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_excel.py +0 -0
  31. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_opossum.py +0 -0
  32. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_scancodejson.py +0 -0
  33. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_spdx.py +0 -0
  34. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_txt.py +0 -0
  35. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util/write_yaml.py +0 -0
  36. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util.egg-info/SOURCES.txt +0 -0
  37. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util.egg-info/dependency_links.txt +0 -0
  38. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util.egg-info/entry_points.txt +0 -0
  39. {fosslight_util-2.1.17 → fosslight_util-2.1.19}/src/fosslight_util.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight_util
3
- Version: 2.1.17
3
+ Version: 2.1.19
4
4
  Summary: FOSSLight Util
5
5
  Home-page: https://github.com/fosslight/fosslight_util
6
6
  Author: LG Electronics
@@ -12,7 +12,6 @@ spdx-tools==0.8.*;sys_platform=="linux"
12
12
  setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability
13
13
  numpy; python_version < '3.8'
14
14
  numpy>=1.22.2; python_version >= '3.8'
15
- npm
16
15
  requests
17
16
  GitPython
18
17
  cyclonedx-python-lib==8.5.*;sys_platform=="linux"
@@ -14,7 +14,7 @@ with open('requirements.txt', 'r', 'utf-8') as f:
14
14
  if __name__ == "__main__":
15
15
  setup(
16
16
  name='fosslight_util',
17
- version='2.1.17',
17
+ version='2.1.19',
18
18
  package_dir={"": "src"},
19
19
  packages=find_packages(where='src'),
20
20
  description='FOSSLight Util',
@@ -5,7 +5,6 @@
5
5
  import logging
6
6
  import re
7
7
  import requests
8
- from npm.bindings import npm_run
9
8
  from lastversion import latest
10
9
  from bs4 import BeautifulSoup
11
10
  from urllib.request import urlopen
@@ -47,6 +46,9 @@ def extract_name_version_from_link(link):
47
46
  origin_name = origin_name[:-1]
48
47
  oss_name = f"go:{origin_name}"
49
48
  oss_version = match.group(2)
49
+ elif key == "cargo":
50
+ oss_name = f"cargo:{origin_name}"
51
+ oss_version = match.group(2)
50
52
  except Exception as ex:
51
53
  logger.info(f"extract_name_version_from_link {key}:{ex}")
52
54
  if oss_name and (not oss_version):
@@ -63,10 +65,11 @@ def get_latest_package_version(link, pkg_type, oss_name):
63
65
 
64
66
  try:
65
67
  if pkg_type in ['npm', 'npm2']:
66
- stderr, stdout = npm_run('view', oss_name, 'version')
67
- if stdout:
68
- find_version = stdout.strip()
69
- link_with_version = f'https://www.npmjs.com/package/{oss_name}/v/{find_version}'
68
+ npm_response = requests.get(f"https://registry.npmjs.org/{oss_name}")
69
+ if npm_response.status_code == 200:
70
+ find_version = npm_response.json().get("dist-tags", {}).get("latest")
71
+ if find_version:
72
+ link_with_version = f'https://www.npmjs.com/package/{oss_name}/v/{find_version}'
70
73
  elif pkg_type == 'pypi':
71
74
  find_version = str(latest(oss_name, at='pip', output_format='version', pre_ok=True))
72
75
  link_with_version = f'https://pypi.org/project/{oss_name}/{find_version}'
@@ -75,17 +78,20 @@ def get_latest_package_version(link, pkg_type, oss_name):
75
78
  if maven_response.status_code == 200:
76
79
  find_version = maven_response.json().get('versions')[-1].get('versionKey').get('version')
77
80
  oss_name = oss_name.replace(':', '/')
78
- link_with_version = f'https://mvnrepository.com/artifact/{oss_name}/{find_version}'
81
+ if find_version:
82
+ link_with_version = f'https://mvnrepository.com/artifact/{oss_name}/{find_version}'
79
83
  elif pkg_type == 'pub':
80
84
  pub_response = requests.get(f'https://pub.dev/api/packages/{oss_name}')
81
85
  if pub_response.status_code == 200:
82
86
  find_version = pub_response.json().get('latest').get('version')
83
- link_with_version = f'https://pub.dev/packages/{oss_name}/versions/{find_version}'
87
+ if find_version:
88
+ link_with_version = f'https://pub.dev/packages/{oss_name}/versions/{find_version}'
84
89
  elif pkg_type == 'go':
85
90
  go_response = requests.get(f'https://proxy.golang.org/{oss_name}/@latest')
86
91
  if go_response.status_code == 200:
87
92
  find_version = go_response.json().get('Version')
88
- link_with_version = f'https://pkg.go.dev/{oss_name}@{find_version}'
93
+ if find_version:
94
+ link_with_version = f'https://pkg.go.dev/{oss_name}@{find_version}'
89
95
  except Exception as e:
90
96
  logger.info(f'Fail to get latest package version({link}:{e})')
91
97
  return find_version, link_with_version
@@ -110,8 +116,34 @@ def get_downloadable_url(link):
110
116
  ret, result_link = get_download_location_for_pub(new_link)
111
117
  elif pkg_type == "go":
112
118
  ret, result_link = get_download_location_for_go(new_link)
119
+ elif pkg_type == "cargo":
120
+ ret, result_link = get_download_location_for_cargo(new_link)
121
+ return ret, result_link, oss_name, oss_version, pkg_type
122
+
123
+
124
+ def get_download_location_for_cargo(link):
125
+ # get the url for downloading source file: https://crates.io/api/v1/crates/<name>/<version>/download
126
+ ret = False
127
+ new_link = ''
128
+ host = 'https://crates.io/api/v1/crates'
129
+
130
+ try:
131
+ dn_loc_re = re.findall(r'crates.io\/crates\/([^\/]+)\/?([^\/]*)', link)
132
+ if dn_loc_re:
133
+ oss_name = dn_loc_re[0][0]
134
+ oss_version = dn_loc_re[0][1]
113
135
 
114
- return ret, result_link, oss_name, oss_version
136
+ new_link = f'{host}/{oss_name}/{oss_version}/download'
137
+ res = urlopen(new_link)
138
+ if res.getcode() == 200:
139
+ ret = True
140
+ else:
141
+ logger.warning(f'Cannot find the valid link for cargo (url:{new_link}')
142
+ except Exception as error:
143
+ ret = False
144
+ logger.warning(f'Cannot find the link for cargo (url:{link}({(new_link)})): {error}')
145
+
146
+ return ret, new_link
115
147
 
116
148
 
117
149
  def get_download_location_for_go(link):
@@ -35,6 +35,7 @@ SHEET_NAME_FOR_SCANNER = {
35
35
  # pub: https://pub.dev/packages/(package)/versions/(version)
36
36
  # Cocoapods : https://cocoapods.org/(package)
37
37
  # go : https://pkg.go.dev/(package_name_with_slash)@(version)
38
+ # cargo : https://crates.io/crates/(crate_name)/(version)
38
39
  PKG_PATTERN = {
39
40
  "pypi": r'https?:\/\/pypi\.org\/project\/([^\/]+)[\/]?([^\/]*)',
40
41
  "pypi2": r'https?:\/\/files\.pythonhosted\.org\/packages\/source\/[\w]\/([^\/]+)\/[\S]+-([^\-]+)\.tar\.gz',
@@ -43,5 +44,6 @@ PKG_PATTERN = {
43
44
  "npm2": r'https?:\/\/www\.npmjs\.com\/package\/(\@[^\/]+\/[^\/]+)(?:\/v\/)?([^\/]*)',
44
45
  "pub": r'https?:\/\/pub\.dev\/packages\/([^\/]+)(?:\/versions\/)?([^\/]*)',
45
46
  "cocoapods": r'https?:\/\/cocoapods\.org\/pods\/([^\/]+)',
46
- "go": r'https?:\/\/pkg.go.dev\/([^\@]+)\@?v?([^\/]*)'
47
+ "go": r'https?:\/\/pkg.go.dev\/([^\@]+)\@?v?([^\/]*)',
48
+ "cargo": r'https?:\/\/crates\.io\/crates\/([^\/]+)\/?([^\/]*)',
47
49
  }
@@ -314,7 +314,7 @@ def download_wget(link, target_dir, compressed_only):
314
314
 
315
315
  Path(target_dir).mkdir(parents=True, exist_ok=True)
316
316
 
317
- ret, new_link, oss_name, oss_version = get_downloadable_url(link)
317
+ ret, new_link, oss_name, oss_version, pkg_type = get_downloadable_url(link)
318
318
  if ret and new_link:
319
319
  link = new_link
320
320
 
@@ -323,6 +323,9 @@ def download_wget(link, target_dir, compressed_only):
323
323
  if link.endswith(ext):
324
324
  success = True
325
325
  break
326
+ if not success:
327
+ if pkg_type == 'cargo':
328
+ success = True
326
329
  else:
327
330
  success = True
328
331
 
@@ -330,7 +333,11 @@ def download_wget(link, target_dir, compressed_only):
330
333
  raise Exception('Not supported compression type (link:{0})'.format(link))
331
334
 
332
335
  logger.info(f"wget: {link}")
333
- downloaded_file = wget.download(link, target_dir)
336
+ if pkg_type == 'cargo':
337
+ outfile = os.path.join(target_dir, f'{oss_name}.tar.gz')
338
+ downloaded_file = wget.download(link, out=outfile)
339
+ else:
340
+ downloaded_file = wget.download(link, target_dir)
334
341
  if platform.system() != "Windows":
335
342
  signal.alarm(0)
336
343
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fosslight-util
3
- Version: 2.1.17
3
+ Version: 2.1.19
4
4
  Summary: FOSSLight Util
5
5
  Home-page: https://github.com/fosslight/fosslight_util
6
6
  Author: LG Electronics
@@ -9,7 +9,6 @@ python3-wget
9
9
  beautifulsoup4
10
10
  jsonmerge
11
11
  setuptools>=65.5.1
12
- npm
13
12
  requests
14
13
  GitPython
15
14
 
File without changes