7
7
Helper functions for packages in SPDX JSON document creation
8
8
"""
9
9
10
+ from license_expression import get_spdx_licensing
10
11
from tern .report import content
11
12
from tern .formats .spdx import spdx_common
12
13
from tern .formats .spdx .spdxjson import formats as json_formats
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
+
24
+
15
25
def get_package_comment (package ):
16
26
'''Given a package object, return a PackageComment string for a list of
17
27
NoticeOrigin objects'''
@@ -23,6 +33,14 @@ def get_package_comment(package):
23
33
return comment
24
34
25
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
+
26
44
def get_source_package_dict (package , template ):
27
45
'''''Given a package object and its SPDX template mapping, return a SPDX
28
46
JSON dictionary representation of the associated source package.
@@ -39,9 +57,8 @@ def get_source_package_dict(package, template):
39
57
mapping ['PackageDownloadLocation' ] else 'NOASSERTION' ,
40
58
'filesAnalyzed' : False , # always false for packages
41
59
'licenseConcluded' : 'NOASSERTION' , # always NOASSERTION
42
- 'licenseDeclared' : spdx_common .get_license_ref (
43
- mapping ['PackageLicenseDeclared' ]) if
44
- mapping ['PackageLicenseDeclared' ] else 'NONE' ,
60
+ 'licenseDeclared' : get_package_license_declared (
61
+ mapping ['PackageLicenseDeclared' ]),
45
62
'copyrightText' : mapping ['PackageCopyrightText' ] if
46
63
mapping ['PackageCopyrightText' ] else 'NONE' ,
47
64
'comment' : json_formats .source_package_comment
@@ -65,9 +82,8 @@ def get_package_dict(package, template):
65
82
mapping ['PackageDownloadLocation' ] else 'NOASSERTION' ,
66
83
'filesAnalyzed' : False , # always false for packages
67
84
'licenseConcluded' : 'NOASSERTION' , # always NOASSERTION
68
- 'licenseDeclared' : spdx_common .get_license_ref (
69
- mapping ['PackageLicenseDeclared' ]) if
70
- mapping ['PackageLicenseDeclared' ] else 'NONE' ,
85
+ 'licenseDeclared' : get_package_license_declared (
86
+ mapping ['PackageLicenseDeclared' ]),
71
87
'copyrightText' : mapping ['PackageCopyrightText' ] if
72
88
mapping ['PackageCopyrightText' ] else 'NONE' ,
73
89
'comment' : get_package_comment (package )
0 commit comments