3030
3131userlog = logging .getLogger ("scancode-evaluate" )
3232
33+
3334class ReturnCode (Enum ):
3435 """Return codes."""
3536
@@ -54,13 +55,12 @@ def path_leaf(path):
5455 return tail or os .path .basename (head )
5556
5657
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"""
59- # temporary workaround for files with Permissive Binary Licenses
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"""
6060 return any (
6161 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 )
62+ for scancode_output_data_file_license in scancode_output_data_file_licenses
63+ )
6464
6565
6666def has_spdx_text_in_scancode_output (scancode_output_data_file_licenses ):
@@ -76,16 +76,20 @@ def has_spdx_text_in_analysed_file(scanned_file_content):
7676 return bool (re .findall ("SPDX-License-Identifier:?" , scanned_file_content ))
7777
7878
79- def has_binary_license (scancode_output_data_file ):
79+ def has_binary_license (scanned_file_content ):
8080 """Returns true if the file analysed by ScanCode contains a Permissive Binary License."""
81+ return bool (re .findall ("Permissive Binary License" , scanned_file_content ))
82+
83+
84+ def get_file_text (scancode_output_data_file ):
85+ """Returns file text for scancode output file"""
8186 file_path = os .path .abspath (scancode_output_data_file ['path' ])
8287 try :
8388 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 ))
89+ return read_file .read ()
8690 except UnicodeDecodeError :
87- userlog .warning ("Unable to look for PBL text in `{}`:" . format ( file_path ) )
88- return False
91+ userlog .warning ("Unable to decode file text in: %s" % file_path )
92+ # Ignore files that cannot be decoded
8993
9094
9195def license_check (scancode_output_path ):
@@ -98,7 +102,7 @@ def license_check(scancode_output_path):
98102
99103 Returns:
100104 0 if nothing found
101- >0 - count how many license isses found
105+ >0 - count how many license issues found
102106 ReturnCode.ERROR.value if any error in file licenses found
103107 """
104108
@@ -125,25 +129,22 @@ def license_check(scancode_output_path):
125129 # check the next file in the scancode output
126130 continue
127131
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 )
132+ if not (has_permissive_text_in_scancode_output (scancode_output_data_file ['licenses' ])):
133+ scanned_file_content = get_file_text (scancode_output_data_file )
134+
135+ if not (scanned_file_content is not None and has_binary_license (scanned_file_content )):
136+ scancode_output_data_file ['fail_reason' ] = MISSING_PERMISSIVE_LICENSE_TEXT
137+ license_offenders .append (scancode_output_data_file )
131138
132139 if not has_spdx_text_in_scancode_output (scancode_output_data_file ['licenses' ]):
133140 # Scancode does not recognize license notice in Python file headers.
134141 # Issue: https://github.com/nexB/scancode-toolkit/issues/1913
135142 # 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
143+ scanned_file_content = get_file_text (scancode_output_data_file )
145144
146- if not has_spdx_text_in_analysed_file (scanned_file_content ):
145+ if scanned_file_content is None :
146+ continue
147+ elif not has_spdx_text_in_analysed_file (scanned_file_content ):
147148 scancode_output_data_file ['fail_reason' ] = MISSING_SPDX_TEXT
148149 spdx_offenders .append (scancode_output_data_file )
149150
0 commit comments