Skip to content

Commit eb3c2e5

Browse files
committed
fix: fallback to license_declared when loading SPDX SBOM
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 0585f53 commit eb3c2e5

4 files changed

Lines changed: 54 additions & 4 deletions

File tree

scanpipe/pipes/resolve.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,11 @@ def spdx_package_to_package_data(spdx_package):
327327
for checksum in spdx_package.checksums
328328
}
329329

330-
declared_license_expression_spdx = spdx_package.license_concluded
330+
if spdx_package.license_concluded not in spdx.EMPTY:
331+
declared_license_expression_spdx = spdx_package.license_concluded
332+
else:
333+
declared_license_expression_spdx = spdx_package.license_declared
334+
331335
declared_expression = ""
332336
if declared_license_expression_spdx:
333337
declared_expression = convert_spdx_expression(declared_license_expression_spdx)
@@ -350,9 +354,7 @@ def spdx_package_to_package_data(spdx_package):
350354
}
351355

352356
return {
353-
key: value
354-
for key, value in package_data.items()
355-
if value not in [None, "", "NOASSERTION"]
357+
key: value for key, value in package_data.items() if value not in spdx.EMPTY
356358
}
357359

358360

scanpipe/pipes/spdx.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
"https://github.com/spdx/spdx-spec/raw/development/v2.2/schemas/spdx-schema.json"
4848
)
4949

50+
EMPTY = [None, "", "NOASSERTION"]
51+
5052
"""
5153
Generate SPDX Documents.
5254
Spec documentation: https://spdx.github.io/spdx-spec/v2.3/
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"spdxVersion": "SPDX-2.3",
3+
"dataLicense": "CC0-1.0",
4+
"SPDXID": "SPDXRef-DOCUMENT",
5+
"name": "analysis",
6+
"documentNamespace": "https://scancode.io/spdxdocs/abc",
7+
"creationInfo": {
8+
"created": "2000-01-01T01:02:03Z",
9+
"creators": [
10+
"Tool: ABC"
11+
],
12+
"licenseListVersion": "3.27"
13+
},
14+
"packages": [
15+
{
16+
"SPDXID": "SPDXRef-Package-abc",
17+
"name": "abc",
18+
"downloadLocation": "NOASSERTION",
19+
"licenseInfoFromFiles": [
20+
"NOASSERTION"
21+
],
22+
"licenseConcluded": "NOASSERTION",
23+
"licenseDeclared": "(GPL-2.0-only AND LGPL-2.1-only)",
24+
"copyrightText": "NOASSERTION",
25+
"versionInfo": "1.0"
26+
}
27+
],
28+
"documentDescribes": [
29+
"SPDXRef-Package-abc"
30+
]
31+
}

scanpipe/tests/pipes/test_resolve.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,21 @@ def test_scanpipe_pipes_resolve_spdx_packages(self):
250250
packages_data = resolve.resolve_spdx_packages(input_location)
251251
self.assertEqual(4, len(packages_data))
252252

253+
def test_scanpipe_pipes_resolve_spdx_packages_license_fields(self):
254+
input_location = self.data / "spdx" / "license-fields.spdx.json"
255+
packages_data = resolve.resolve_spdx_packages(input_location)
256+
expected = [
257+
{
258+
"package_uid": "SPDXRef-Package-abc",
259+
"name": "abc",
260+
"declared_license_expression": "gpl-2.0 AND lgpl-2.1",
261+
"declared_license_expression_spdx": "(GPL-2.0-only AND LGPL-2.1-only)",
262+
"extracted_license_statement": "(GPL-2.0-only AND LGPL-2.1-only)",
263+
"version": "1.0",
264+
}
265+
]
266+
self.assertEqual(expected, packages_data)
267+
253268
def test_scanpipe_pipes_resolve_spdx_dependencies(self):
254269
input_location = self.data / "spdx" / "SPDXJSONExample-v2.3.spdx.json"
255270
dependencies_data = resolve.resolve_spdx_dependencies(input_location)

0 commit comments

Comments
 (0)