1515from ._parsing_scancode_file_item import parsing_file_item , get_error_from_header
1616from fosslight_util .write_excel import write_excel_and_csv
1717from ._help import print_help_msg_convert
18+ from ._license_matched import get_license_list_to_print
1819
1920logger = logging .getLogger (constant .LOGGER_NAME )
2021_PKG_NAME = "fosslight_source"
2122
2223
23- def convert_json_to_excel (scancode_json , excel_name , _result_log ):
24+ def convert_json_to_excel (scancode_json , excel_name , result_log , need_license = False ):
25+ sheet_license_prefix = "matched_text"
26+ sheet_SRC_prefix = "SRC"
2427 file_list = []
28+ lic_list = {}
2529 msg = ""
2630 success = True
2731
2832 try :
2933 sheet_list = {}
3034 if os .path .isfile (scancode_json ):
31- file_list = get_detected_licenses_from_scancode (
32- scancode_json )
35+ file_list , lic_list = get_detected_licenses_from_scancode (
36+ scancode_json , need_license )
3337 if len (file_list ) > 0 :
3438 file_list = sorted (
3539 file_list , key = lambda row : ('' .join (row .licenses )))
36- sheet_list ["SRC" ] = [scan_item .get_row_to_print () for scan_item in file_list ]
40+ sheet_list [sheet_SRC_prefix ] = [scan_item .get_row_to_print () for scan_item in file_list ]
41+ if need_license :
42+ sheet_list [sheet_license_prefix ] = get_license_list_to_print (lic_list )
3743 elif os .path .isdir (scancode_json ):
3844 for root , dirs , files in os .walk (scancode_json ):
3945 for file in files :
4046 if file .endswith (".json" ):
4147 try :
4248 result_file = os .path .join (root , file )
43- file_list = get_detected_licenses_from_scancode (
44- result_file )
49+ file_list , lic_list = get_detected_licenses_from_scancode (
50+ result_file , need_license )
4551 if len (file_list ) > 0 :
4652 file_name = os .path .basename (file )
4753 file_list = sorted (
4854 file_list , key = lambda row : ('' .join (row .licenses )))
49- sheet_list ["SRC_" + file_name ] = [scan_item .get_row_to_print () for scan_item in file_list ]
55+ sheet_list [sheet_SRC_prefix + "_" + file_name ] = [scan_item .get_row_to_print () for scan_item in file_list ]
56+ if need_license :
57+ sheet_list [sheet_license_prefix + "_" + file_name ] = get_license_list_to_print (lic_list )
5058 except Exception as ex :
5159 logger .warning ("Error parsing " + file + ":" + str (ex ))
5260
5361 success_to_write , writing_msg = write_excel_and_csv (excel_name , sheet_list )
5462 logger .info ("Writing excel :" + str (success_to_write ) + " " + writing_msg )
5563 if success_to_write :
56- _result_log ["FOSSLight Report" ] = excel_name + ".xlsx"
64+ result_log ["FOSSLight Report" ] = excel_name + ".xlsx"
5765
5866 except Exception as ex :
5967 success = False
6068 logger .warning (str (ex ))
6169
6270 scan_result_msg = str (success ) if msg == "" else str (success ) + "," + msg
63- _result_log ["Scan Result" ] = scan_result_msg
71+ result_log ["Scan Result" ] = scan_result_msg
6472
6573 try :
66- _str_final_result_log = yaml .safe_dump (_result_log , allow_unicode = True , sort_keys = True )
74+ _str_final_result_log = yaml .safe_dump (result_log , allow_unicode = True , sort_keys = True )
6775 logger .info (_str_final_result_log )
6876 except Exception as ex :
6977 logger .warning ("Failed to print result log.: " + str (ex ))
7078
7179 return file_list
7280
7381
74- def get_detected_licenses_from_scancode (scancode_json_file ):
82+ def get_detected_licenses_from_scancode (scancode_json_file , need_license ):
7583 file_list = []
84+ license_list = {}
7685 try :
7786 logger .info ("Start parsing " + scancode_json_file )
7887 with open (scancode_json_file , "r" ) as st_json :
7988 st_python = json .load (st_json )
8089 has_error , str_error = get_error_from_header (st_python ["headers" ])
81- rc , file_list , msg = parsing_file_item (st_python ["files" ], has_error )
90+ rc , file_list , msg , license_list = parsing_file_item (st_python ["files" ], has_error , need_license )
8291 logger .info ("|---" + msg )
8392 if has_error :
8493 logger .info ("|---Scan error:" + str_error )
8594 except Exception as error :
8695 logger .warning ("Parsing " + scancode_json_file + ":" + str (error ))
8796 logger .info ("|---Number of files detected: " + str (len (file_list )))
88- return file_list
97+ return file_list , license_list
8998
9099
91100def main ():
@@ -95,16 +104,19 @@ def main():
95104 path_to_find_bin = os .getcwd ()
96105 start_time = datetime .now ().strftime ('%Y-%m-%d_%H-%M-%S' )
97106 output_file_name = ""
107+ print_matched_text = False
98108
99109 try :
100- opts , args = getopt .getopt (argv , 'hp :o:' )
110+ opts , args = getopt .getopt (argv , 'hmp :o:' )
101111 for opt , arg in opts :
102112 if opt == "-h" :
103113 print_help_msg_convert ()
104114 elif opt == "-p" :
105115 path_to_find_bin = arg
106116 elif opt == "-o" :
107117 output_file_name = arg
118+ elif opt == "-m" :
119+ print_matched_text = True
108120 except Exception :
109121 print_help_msg_convert ()
110122
@@ -117,7 +129,7 @@ def main():
117129
118130 logger , _result_log = init_log (os .path .join (output_dir , "fosslight_src_log_" + start_time + ".txt" ),
119131 True , logging .INFO , logging .DEBUG , _PKG_NAME )
120- convert_json_to_excel (path_to_find_bin , oss_report_name , _result_log )
132+ convert_json_to_excel (path_to_find_bin , oss_report_name , _result_log , print_matched_text )
121133
122134
123135if __name__ == '__main__' :
0 commit comments