30
30
31
31
userlog = logging .getLogger ("scancode-evaluate" )
32
32
33
+
33
34
class ReturnCode (Enum ):
34
35
"""Return codes."""
35
36
@@ -54,13 +55,13 @@ def path_leaf(path):
54
55
return tail or os .path .basename (head )
55
56
56
57
57
- def has_permissive_text_in_scancode_output (scancode_output_data_file ):
58
- """Returns true if at least one license in the scancode output is permissive or is a Permissive Binary License """
58
+ def has_permissive_text_in_scancode_output (scancode_output_data_file_licenses ):
59
+ """Returns true if at least one license in the scancode output is permissive"""
59
60
# temporary workaround for files with Permissive Binary Licenses
60
61
return any (
61
62
scancode_output_data_file_license ['category' ] == 'Permissive'
62
- for scancode_output_data_file_license in scancode_output_data_file [ 'licenses' ]
63
- ) or has_binary_license ( scancode_output_data_file )
63
+ for scancode_output_data_file_license in scancode_output_data_file_licenses
64
+ )
64
65
65
66
66
67
def has_spdx_text_in_scancode_output (scancode_output_data_file_licenses ):
@@ -76,16 +77,20 @@ def has_spdx_text_in_analysed_file(scanned_file_content):
76
77
return bool (re .findall ("SPDX-License-Identifier:?" , scanned_file_content ))
77
78
78
79
79
- def has_binary_license (scancode_output_data_file ):
80
+ def has_binary_license (scanned_file_content ):
80
81
"""Returns true if the file analysed by ScanCode contains a Permissive Binary License."""
82
+ return bool (re .findall ("Permissive Binary License" , scanned_file_content ))
83
+
84
+
85
+ def get_file_text (scancode_output_data_file ):
86
+ """Returns file text for scancode output file"""
81
87
file_path = os .path .abspath (scancode_output_data_file ['path' ])
82
88
try :
83
89
with open (file_path , 'r' ) as read_file :
84
- scanned_file_content = read_file .read ()
85
- return bool (re .findall ("Permissive Binary License" , scanned_file_content ))
90
+ return read_file .read ()
86
91
except UnicodeDecodeError :
87
- userlog .warning ("Unable to look for PBL text in `{}`:" . format ( file_path ) )
88
- return False
92
+ userlog .warning ("Unable to decode file text in: %s" % file_path )
93
+ # Ignore files that cannot be decoded
89
94
90
95
91
96
def license_check (scancode_output_path ):
@@ -98,7 +103,7 @@ def license_check(scancode_output_path):
98
103
99
104
Returns:
100
105
0 if nothing found
101
- >0 - count how many license isses found
106
+ >0 - count how many license issues found
102
107
ReturnCode.ERROR.value if any error in file licenses found
103
108
"""
104
109
@@ -125,25 +130,22 @@ def license_check(scancode_output_path):
125
130
# check the next file in the scancode output
126
131
continue
127
132
128
- if not has_permissive_text_in_scancode_output (scancode_output_data_file ):
129
- scancode_output_data_file ['fail_reason' ] = MISSING_PERMISSIVE_LICENSE_TEXT
130
- license_offenders .append (scancode_output_data_file )
133
+ if not (has_permissive_text_in_scancode_output (scancode_output_data_file ['licenses' ])):
134
+ scanned_file_content = get_file_text (scancode_output_data_file )
135
+
136
+ if not (scanned_file_content is not None and has_binary_license (scanned_file_content )):
137
+ scancode_output_data_file ['fail_reason' ] = MISSING_PERMISSIVE_LICENSE_TEXT
138
+ license_offenders .append (scancode_output_data_file )
131
139
132
140
if not has_spdx_text_in_scancode_output (scancode_output_data_file ['licenses' ]):
133
141
# Scancode does not recognize license notice in Python file headers.
134
142
# Issue: https://github.com/nexB/scancode-toolkit/issues/1913
135
143
# Therefore check if the file tested by ScanCode actually has a licence notice.
136
- file_path = os .path .abspath (scancode_output_data_file ['path' ])
137
- try :
138
- with open (file_path , 'r' ) as read_file :
139
- scanned_file_content = read_file .read ()
140
- except UnicodeDecodeError :
141
- userlog .warning ("Unable to look for SPDX text in `{}`:" .format (file_path ))
142
- # Ignore files that cannot be decoded
143
- # check the next file in the scancode output
144
- continue
144
+ scanned_file_content = get_file_text (scancode_output_data_file )
145
145
146
- if not has_spdx_text_in_analysed_file (scanned_file_content ):
146
+ if scanned_file_content is None :
147
+ continue
148
+ elif not has_spdx_text_in_analysed_file (scanned_file_content ):
147
149
scancode_output_data_file ['fail_reason' ] = MISSING_SPDX_TEXT
148
150
spdx_offenders .append (scancode_output_data_file )
149
151
0 commit comments