fosslight-util 2.1.35__tar.gz → 2.1.36__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 (47) hide show
  1. {fosslight_util-2.1.35/src/fosslight_util.egg-info → fosslight_util-2.1.36}/PKG-INFO +1 -1
  2. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/setup.py +1 -1
  3. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/get_pom_license.py +33 -2
  4. {fosslight_util-2.1.35 → fosslight_util-2.1.36/src/fosslight_util.egg-info}/PKG-INFO +1 -1
  5. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/LICENSE +0 -0
  6. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/MANIFEST.in +0 -0
  7. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/README.md +0 -0
  8. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/requirements.txt +0 -0
  9. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/setup.cfg +0 -0
  10. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/__init__.py +0 -0
  11. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/_get_downloadable_url.py +0 -0
  12. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/compare_yaml.py +0 -0
  13. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/constant.py +0 -0
  14. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/correct.py +0 -0
  15. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/cover.py +0 -0
  16. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/download.py +0 -0
  17. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/exclude.py +0 -0
  18. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/help.py +0 -0
  19. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/oss_item.py +0 -0
  20. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/output_format.py +0 -0
  21. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/parsing_yaml.py +0 -0
  22. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/read_excel.py +0 -0
  23. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/resources/frequentLicenselist.json +0 -0
  24. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/resources/frequent_license_nick_list.json +0 -0
  25. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/resources/licenses.json +0 -0
  26. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/set_log.py +0 -0
  27. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/spdx_licenses.py +0 -0
  28. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/timer_thread.py +0 -0
  29. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_cyclonedx.py +0 -0
  30. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_excel.py +0 -0
  31. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_opossum.py +0 -0
  32. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_scancodejson.py +0 -0
  33. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_spdx.py +0 -0
  34. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_txt.py +0 -0
  35. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util/write_yaml.py +0 -0
  36. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util.egg-info/SOURCES.txt +0 -0
  37. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util.egg-info/dependency_links.txt +0 -0
  38. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util.egg-info/entry_points.txt +0 -0
  39. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util.egg-info/requires.txt +0 -0
  40. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/src/fosslight_util.egg-info/top_level.txt +0 -0
  41. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_cyclonedx.py +0 -0
  42. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_download.py +0 -0
  43. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_opossum.py +0 -0
  44. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_spdx_licenses.py +0 -0
  45. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_text.py +0 -0
  46. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_write_output.py +0 -0
  47. {fosslight_util-2.1.35 → fosslight_util-2.1.36}/tests/test_write_yaml.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fosslight_util
3
- Version: 2.1.35
3
+ Version: 2.1.36
4
4
  Summary: FOSSLight Util
5
5
  Home-page: https://github.com/fosslight/fosslight_util
6
6
  Download-URL: https://github.com/fosslight/fosslight_util
@@ -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.35',
17
+ version='2.1.36',
18
18
  package_dir={"": "src"},
19
19
  packages=find_packages(where='src'),
20
20
  description='FOSSLight Util',
@@ -8,6 +8,12 @@ import logging
8
8
  import urllib.request
9
9
  from urllib.error import URLError, HTTPError
10
10
  from defusedxml.ElementTree import fromstring as xml_fromstring
11
+ import ssl
12
+ # certifi is optional: if unavailable, use the default SSL context
13
+ try:
14
+ import certifi # type: ignore
15
+ except Exception: # pragma: no cover - optional dependency
16
+ certifi = None
11
17
  import fosslight_util.constant as constant
12
18
 
13
19
  logger = logging.getLogger(constant.LOGGER_NAME)
@@ -19,6 +25,15 @@ def get_license_from_pom(group_id: str = None,
19
25
  pom_path: str = None,
20
26
  check_parent: bool = True) -> str:
21
27
 
28
+ def get_ssl_context():
29
+ try:
30
+ if certifi is not None:
31
+ return ssl.create_default_context(cafile=certifi.where())
32
+ return ssl.create_default_context()
33
+ except Exception as e:
34
+ logger.debug(f"Failed to create SSL context: {e}")
35
+ return None
36
+
22
37
  def build_urls(g, a, v):
23
38
  group_path = g.replace('.', '/')
24
39
  name = f"{a}-{v}.pom"
@@ -27,11 +42,25 @@ def get_license_from_pom(group_id: str = None,
27
42
  return [repo1, google]
28
43
 
29
44
  def fetch_pom(g, a, v):
45
+ ssl_ctx = get_ssl_context()
30
46
  for url in build_urls(g, a, v):
31
47
  try:
48
+ if ssl_ctx is not None:
49
+ with urllib.request.urlopen(url, context=ssl_ctx) as resp:
50
+ return resp.read().decode('utf-8')
32
51
  with urllib.request.urlopen(url) as resp:
33
52
  return resp.read().decode('utf-8')
34
- except (HTTPError, URLError):
53
+ except ssl.SSLError as e:
54
+ logger.warning(
55
+ f"SSL certificate verification failed for {url}. "
56
+ f"Please fix system certificates or use certifi. (error: {e})"
57
+ )
58
+ continue
59
+ except (HTTPError, URLError) as e:
60
+ logger.warning(f"Failed to fetch POM from {url}: {e}")
61
+ continue
62
+ except Exception as e:
63
+ logger.warning(f"Unexpected error fetching POM from {url}: {e}")
35
64
  continue
36
65
  return None
37
66
 
@@ -66,10 +95,12 @@ def get_license_from_pom(group_id: str = None,
66
95
  visited.add(key)
67
96
  content = fetch_pom(g, a, v)
68
97
  if not content:
98
+ logger.warning(f"Failed to obtain POM content for {g}:{a}:{v} from remote sources.")
69
99
  return ''
70
100
  try:
71
101
  root = xml_fromstring(content)
72
- except Exception:
102
+ except Exception as e:
103
+ logger.warning(f"Failed to parse POM for {g}:{a}:{v}: {e}")
73
104
  return ''
74
105
  licenses = extract_licenses(root)
75
106
  if licenses:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fosslight_util
3
- Version: 2.1.35
3
+ Version: 2.1.36
4
4
  Summary: FOSSLight Util
5
5
  Home-page: https://github.com/fosslight/fosslight_util
6
6
  Download-URL: https://github.com/fosslight/fosslight_util
File without changes