Skip to content

Commit 6de507c

Browse files
committed
Update PackageLicenseDeclared to output license info (tag/value)
Previously the `PackageLicenseDeclared` data for `spdxtagvalue` was set to license reference of type `LicenseRef-df8cb33` which is not informative. This change updates that data to the actual license info, f.e. `MIT`, in case a license is declared, or the `LicenseRef-df8cb33` value if it's not Signed-off-by: Ivana Atanasova <[email protected]>
1 parent 048ae80 commit 6de507c

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ regex>=2022.3
1717
GitPython~=3.1
1818
prettytable~=3.2
1919
packageurl-python>=0.9.9
20+
license_expression>=21.6.14

tern/formats/spdx/spdxtagvalue/package_helpers.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,20 @@
77
Helper functions for packages in SPDX document
88
"""
99

10+
from license_expression import get_spdx_licensing
1011
from tern.formats.spdx.spdxtagvalue import formats as spdx_formats
1112
from tern.formats.spdx import spdx_common
1213
from tern.report import content
1314

1415

16+
def is_spdx_license_expression(license_data):
17+
'''Return True if the license is a valid SPDX license expression, else
18+
return False'''
19+
licensing = get_spdx_licensing()
20+
if ',' in license_data:
21+
license_data = license_data.replace(',', ' ')
22+
return licensing.validate(license_data).errors == []
23+
1524
def get_package_comment(package_obj):
1625
'''Return a PackageComment tag-value text block for a list of
1726
NoticeOrigin objects'''
@@ -24,6 +33,14 @@ def get_package_comment(package_obj):
2433
return comment
2534

2635

36+
def get_package_license_declared(package_license_declared):
37+
if package_license_declared:
38+
if is_spdx_license_expression(package_license_declared):
39+
return package_license_declared
40+
return spdx_common.get_license_ref(package_license_declared)
41+
return 'NONE'
42+
43+
2744
def get_source_package_block(package_obj, template):
2845
'''Given a package object and its SPDX template mapping, return a SPDX
2946
document block for the corresponding source package.
@@ -55,11 +72,8 @@ def get_source_package_block(package_obj, template):
5572
# Package License Concluded (always NOASSERTION)
5673
block += 'PackageLicenseConcluded: NOASSERTION\n'
5774
# Package License Declared (use the license ref for this)
58-
if mapping['PackageLicenseDeclared']:
59-
block += 'PackageLicenseDeclared: {}\n'.format(
60-
spdx_common.get_license_ref(mapping['PackageLicenseDeclared']))
61-
else:
62-
block += 'PackageLicenseDeclared: NONE\n'
75+
block += 'PackageLicenseDeclared: ' + get_package_license_declared(
76+
mapping['PackageLicenseDeclared']) + '\n'
6377
# Package Copyright Text
6478
if mapping['PackageCopyrightText']:
6579
block += 'PackageCopyrightText:' + spdx_formats.block_text.format(
@@ -100,11 +114,8 @@ def get_package_block(package_obj, template):
100114
# Package License Concluded (always NOASSERTION)
101115
block += 'PackageLicenseConcluded: NOASSERTION\n'
102116
# Package License Declared (use the license ref for this)
103-
if mapping['PackageLicenseDeclared']:
104-
block += 'PackageLicenseDeclared: {}\n'.format(
105-
spdx_common.get_license_ref(mapping['PackageLicenseDeclared']))
106-
else:
107-
block += 'PackageLicenseDeclared: NONE\n'
117+
block += 'PackageLicenseDeclared: ' + get_package_license_declared(
118+
mapping['PackageLicenseDeclared']) + '\n'
108119
# Package Copyright Text
109120
if mapping['PackageCopyrightText']:
110121
block += 'PackageCopyrightText:' + spdx_formats.block_text.format(

0 commit comments

Comments
 (0)