scanoss 1.17.2__py3-none-any.whl → 1.17.3__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.
scanoss/__init__.py CHANGED
@@ -22,4 +22,4 @@
22
22
  THE SOFTWARE.
23
23
  """
24
24
 
25
- __version__ = "1.17.2"
25
+ __version__ = "1.17.3"
scanoss/cli.py CHANGED
@@ -26,8 +26,9 @@ import os
26
26
  from pathlib import Path
27
27
  import sys
28
28
  import pypac
29
- from scanoss.inspection.copyleft import Copyleft
30
- from scanoss.inspection.undeclared_component import UndeclaredComponent
29
+
30
+ from .inspection.copyleft import Copyleft
31
+ from .inspection.undeclared_component import UndeclaredComponent
31
32
  from .threadeddependencies import SCOPE
32
33
  from .scanoss_settings import ScanossSettings
33
34
  from .scancodedeps import ScancodeDeps
@@ -1 +1 @@
1
- date: 20241104160508, utime: 1730736308
1
+ date: 20241105131130, utime: 1730812290
@@ -23,7 +23,7 @@
23
23
  """
24
24
  import json
25
25
  from typing import Dict, Any
26
- from scanoss.inspection.policy_check import PolicyCheck, PolicyStatus
26
+ from .policy_check import PolicyCheck, PolicyStatus
27
27
 
28
28
  class Copyleft(PolicyCheck):
29
29
  """
@@ -26,8 +26,9 @@ import os.path
26
26
  from abc import abstractmethod
27
27
  from enum import Enum
28
28
  from typing import Callable, List, Dict, Any
29
- from scanoss.inspection.utils.license_utils import LicenseUtil
30
- from scanoss.scanossbase import ScanossBase
29
+ from .utils.license_utils import LicenseUtil
30
+ from ..scanossbase import ScanossBase
31
+
31
32
 
32
33
  class PolicyStatus(Enum):
33
34
  """
@@ -23,7 +23,7 @@
23
23
  """
24
24
  import json
25
25
  from typing import Dict, Any
26
- from scanoss.inspection.policy_check import PolicyCheck, PolicyStatus
26
+ from .policy_check import PolicyCheck, PolicyStatus
27
27
 
28
28
  class UndeclaredComponent(PolicyCheck):
29
29
  """
@@ -115,7 +115,7 @@ class UndeclaredComponent(PolicyCheck):
115
115
  'summary': self._get_summary(components),
116
116
  }
117
117
 
118
- def _generate_sbom_file(self, components: list) -> dict[str, list[dict[str, str]]]:
118
+ def _generate_sbom_file(self, components: list) -> dict:
119
119
  """
120
120
  Generate a list of PURLs for the SBOM file.
121
121
 
@@ -21,7 +21,7 @@
21
21
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
22
  THE SOFTWARE.
23
23
  """
24
- from scanoss.scanossbase import ScanossBase
24
+ from ...scanossbase import ScanossBase
25
25
 
26
26
  DEFAULT_COPYLEFT_LICENSES = {
27
27
  'agpl-3.0-only', 'artistic-1.0', 'artistic-2.0', 'cc-by-sa-4.0', 'cddl-1.0', 'cddl-1.1', 'cecill-2.1',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scanoss
3
- Version: 1.17.2
3
+ Version: 1.17.3
4
4
  Summary: Simple Python library to leverage the SCANOSS APIs
5
5
  Home-page: https://scanoss.com
6
6
  Author: SCANOSS
@@ -4,8 +4,8 @@ protoc_gen_swagger/options/annotations_pb2.py,sha256=b25EDD6gssUWnFby9gxgcpLIROT
4
4
  protoc_gen_swagger/options/annotations_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
5
5
  protoc_gen_swagger/options/openapiv2_pb2.py,sha256=vYElGp8E1vGHszvWqX97zNG9GFJ7u2QcdK9ouq0XdyI,14939
6
6
  protoc_gen_swagger/options/openapiv2_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
7
- scanoss/__init__.py,sha256=aru_CeXo9ujcKEUaT1zaTFbIBCn_pJNsNzmB2T4ewwU,1163
8
- scanoss/cli.py,sha256=6NlNf1PHlaWNpsDhXFXvrwdLUFiCHbPypj4eFl4rJ5U,50665
7
+ scanoss/__init__.py,sha256=1NiSw2lXM_aNTdlVVTT7y0u5plLKheHEs83ftzzggNc,1163
8
+ scanoss/cli.py,sha256=LSe8D3whEiDXgVyAtw2dsVqBd9BwQyB6POz4cH7kVf8,50652
9
9
  scanoss/components.py,sha256=ZHZ1KA69shxOASZK7USD9yPTITpAc_RXL5q5zpDK23o,12590
10
10
  scanoss/csvoutput.py,sha256=hBwr_Fc6mBdOdXgyQcdFrockYH-PJ0jblowlExJ6OPg,9925
11
11
  scanoss/cyclonedx.py,sha256=JVBYeR3D-i4yP9cVSyWvm0_7Y8Kr2MC5GxMgRGAf8R0,12585
@@ -50,19 +50,17 @@ scanoss/api/vulnerabilities/__init__.py,sha256=FLQtiDiv85Q1Chk-sJ9ky9WOV1mulZhEK
50
50
  scanoss/api/vulnerabilities/v2/__init__.py,sha256=FLQtiDiv85Q1Chk-sJ9ky9WOV1mulZhEKjiBihlwiaM,1139
51
51
  scanoss/api/vulnerabilities/v2/scanoss_vulnerabilities_pb2.py,sha256=CFhF80av8tenGvn9AIsGEtRJPuV2dC_syA5JLZb2lDw,5464
52
52
  scanoss/api/vulnerabilities/v2/scanoss_vulnerabilities_pb2_grpc.py,sha256=HlS4k4Zmx6RIAqaO9I96jD-eyF5yU6Xx04pVm7pdqOg,6864
53
- scanoss/data/build_date.txt,sha256=oPE2N3MmwjrcnboSRBZJnf0DruUMcoSRdYculyX05aA,40
53
+ scanoss/data/build_date.txt,sha256=iecgeD6VIUUJDqEOmZ76jXpADPg08oJD7N5i8Acxrd8,40
54
54
  scanoss/data/spdx-exceptions.json,sha256=s7UTYxC7jqQXr11YBlIWYCNwN6lRDFTR33Y8rpN_dA4,17953
55
55
  scanoss/data/spdx-licenses.json,sha256=A6Z0q82gaTLtnopBfzeIVZjJFxkdRW1g2TuumQc-lII,228794
56
56
  scanoss/inspection/__init__.py,sha256=z62680zKq4OmBOugSODvgpSwdsloZL7bvcaMbnx3xgU,1139
57
- scanoss/inspection/copyleft.py,sha256=B150gqqEvXZXq5toYtmNCKY7M0WkooBUWYiIeu48aek,6581
58
- scanoss/inspection/policy_check.py,sha256=r4qvY8j5Vz8FflVL1xZxkd7ufX_wLh5ocna6MoTkPWg,14775
59
- scanoss/inspection/undeclared_component.py,sha256=XUxNz6iaAoeLPPT4XnfeQlvOv-2thmf1MxP3KRmegQE,6853
60
- scanoss/inspection/utils/license_utils.py,sha256=iln0414t-cfmVktmAd7ANK7oOqpfRUvwRwIgrj-6GJA,5098
61
- scanoss/inspection/utils/markdown_utils.py,sha256=hCa7rqBvtRoAziz3wj0gbpUOrPJIEi3pTvIUrsZf6qc,808
62
- scanoss/inspection/utils/result_utils.py,sha256=OJRFznK4WCBMNvgX9kTus5WI5eTKjTXp_kWya7ixCyQ,2938
63
- scanoss-1.17.2.dist-info/LICENSE,sha256=LLUaXoiyOroIbr5ubAyrxBOwSRLTm35ETO2FmLpy8QQ,1074
64
- scanoss-1.17.2.dist-info/METADATA,sha256=xdt4go57mXTL7fodzNRcOSC7ywmvFHTW-Hs6F5SWoGc,5936
65
- scanoss-1.17.2.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
66
- scanoss-1.17.2.dist-info/entry_points.txt,sha256=Uy28xnaDL5KQ7V77sZD5VLDXPNxYYzSr5tsqtiXVzAs,48
67
- scanoss-1.17.2.dist-info/top_level.txt,sha256=V11PrQ6Pnrc-nDF9xnisnJ8e6-i7HqSIKVNqduRWcL8,27
68
- scanoss-1.17.2.dist-info/RECORD,,
57
+ scanoss/inspection/copyleft.py,sha256=dkiLkgNYz7cbIQZCzy6zThiIyHkqrper_xruZ9PQhAI,6563
58
+ scanoss/inspection/policy_check.py,sha256=eo5VfEBwKoDSqIwRi0xwaVLy6EUR29HlH5Bl0Kpvx7I,14752
59
+ scanoss/inspection/undeclared_component.py,sha256=BxFhRrI_b_Ulu7cArm5ySphAXT7DfMmbrrGy121cz14,6808
60
+ scanoss/inspection/utils/license_utils.py,sha256=mIaoVWXMA6shkRQmgmiP2mWchjxX4ex8LWs91Nf6rq4,5093
61
+ scanoss-1.17.3.dist-info/LICENSE,sha256=LLUaXoiyOroIbr5ubAyrxBOwSRLTm35ETO2FmLpy8QQ,1074
62
+ scanoss-1.17.3.dist-info/METADATA,sha256=b62_P5hYfA_3m9WoZg87MXMwvO2KXzYuxeoQ_yxGkTw,5936
63
+ scanoss-1.17.3.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
64
+ scanoss-1.17.3.dist-info/entry_points.txt,sha256=Uy28xnaDL5KQ7V77sZD5VLDXPNxYYzSr5tsqtiXVzAs,48
65
+ scanoss-1.17.3.dist-info/top_level.txt,sha256=V11PrQ6Pnrc-nDF9xnisnJ8e6-i7HqSIKVNqduRWcL8,27
66
+ scanoss-1.17.3.dist-info/RECORD,,
@@ -1,23 +0,0 @@
1
- def generate_table(headers, rows, centered_columns=None):
2
- """
3
- Generate Markdown table
4
- :param headers: List of headers
5
- :param rows: Rows
6
- :param centered_columns: List with centered columns
7
- """
8
- COL_SEP = ' | '
9
- centered_column_set = set(centered_columns or [])
10
- def create_separator(header, index):
11
- if centered_columns is None:
12
- return '-'
13
- return ':-:' if index in centered_column_set else '-'
14
-
15
- row_separator = COL_SEP + COL_SEP.join(
16
- create_separator(header, index) for index, header in enumerate(headers)
17
- ) + COL_SEP
18
-
19
- table_rows = [COL_SEP + COL_SEP.join(headers) + COL_SEP]
20
- table_rows.append(row_separator)
21
- table_rows.extend(COL_SEP + COL_SEP.join(row) + COL_SEP for row in rows)
22
-
23
- return '\n'.join(table_rows)
@@ -1,79 +0,0 @@
1
- from enum import Enum
2
- from typing import Dict, Any
3
-
4
- from scanoss.inspection.utils.license_utils import license_util
5
-
6
-
7
- class ComponentID(Enum):
8
- FILE = "file"
9
- SNIPPET = "snippet"
10
- DEPENDENCY = "dependency"
11
-
12
-
13
- def _append_component(components: Dict[str, Any], new_component: Dict[str, Any]) -> Dict[str, Any]:
14
- """
15
- Append a new component to the components dictionary.
16
-
17
- This function creates a new entry in the components dictionary for the given component,
18
- or updates an existing entry if the component already exists. It also processes the
19
- licenses associated with the component.
20
-
21
- :param components: The existing dictionary of components
22
- :param new_component: The new component to be added or updated
23
- :return: The updated components dictionary
24
- """
25
- component_key = f"{new_component['purl'][0]}@{new_component['version']}"
26
- components[component_key] = {
27
- 'purl': new_component['purl'][0],
28
- 'version': new_component['version'],
29
- 'licenses': {},
30
- 'status': new_component['status'],
31
- }
32
-
33
- # Process licenses for this component
34
- for l in new_component['licenses']:
35
- spdxid = l['name']
36
- components[component_key]['licenses'][spdxid] = {
37
- 'spdxid': spdxid,
38
- 'copyleft': license_util.is_copyleft(spdxid),
39
- 'url': l.get('url')
40
- }
41
-
42
- return components
43
-
44
-
45
- def get_components(results: Dict[str, Any]) -> list:
46
- """
47
- Process the results dictionary to extract and format component information.
48
-
49
- This function iterates through the results dictionary, identifying components from
50
- different sources (files, snippets, and dependencies). It consolidates this information
51
- into a list of unique components, each with its associated licenses and other details.
52
-
53
- :param results: A dictionary containing the raw results of a component scan
54
- :return: A list of dictionaries, each representing a unique component with its details
55
- """
56
- components = {}
57
- for component in results.values():
58
- for c in component:
59
- if c['id'] in [ComponentID.FILE.value, ComponentID.SNIPPET.value]:
60
- component_key = f"{c['purl'][0]}@{c['version']}"
61
-
62
- # Initialize or update the component entry
63
- if component_key not in components:
64
- components = _append_component(components, c)
65
-
66
- if c['id'] == ComponentID.DEPENDENCY.value:
67
- for d in c['dependencies']:
68
- component_key = f"{d['purl'][0]}@{d['version']}"
69
-
70
- if component_key not in components:
71
- components = _append_component(components, d)
72
- # End of for loop
73
- # End if
74
- # End if
75
- results = list(components.values())
76
- for component in results:
77
- component['licenses'] = list(component['licenses'].values())
78
-
79
- return results