7
7
Helper functions for packages in SPDX document
8
8
"""
9
9
10
+ from license_expression import get_spdx_licensing
10
11
from tern .formats .spdx .spdxtagvalue import formats as spdx_formats
11
12
from tern .formats .spdx import spdx_common
12
13
from tern .report import content
13
14
14
15
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
+
15
24
def get_package_comment (package_obj ):
16
25
'''Return a PackageComment tag-value text block for a list of
17
26
NoticeOrigin objects'''
@@ -24,6 +33,14 @@ def get_package_comment(package_obj):
24
33
return comment
25
34
26
35
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
+
27
44
def get_source_package_block (package_obj , template ):
28
45
'''Given a package object and its SPDX template mapping, return a SPDX
29
46
document block for the corresponding source package.
@@ -55,11 +72,8 @@ def get_source_package_block(package_obj, template):
55
72
# Package License Concluded (always NOASSERTION)
56
73
block += 'PackageLicenseConcluded: NOASSERTION\n '
57
74
# 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 '
63
77
# Package Copyright Text
64
78
if mapping ['PackageCopyrightText' ]:
65
79
block += 'PackageCopyrightText:' + spdx_formats .block_text .format (
@@ -100,11 +114,8 @@ def get_package_block(package_obj, template):
100
114
# Package License Concluded (always NOASSERTION)
101
115
block += 'PackageLicenseConcluded: NOASSERTION\n '
102
116
# 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 '
108
119
# Package Copyright Text
109
120
if mapping ['PackageCopyrightText' ]:
110
121
block += 'PackageCopyrightText:' + spdx_formats .block_text .format (
0 commit comments