1212import copy
1313from pathlib import Path
1414import fosslight_util .constant as constant
15+ from jsonmerge import merge
1516
1617_HEADER = {'BIN (' : ['ID' , 'Binary Name' , 'Source Code Path' ,
1718 'NOTICE.html' , 'OSS Name' , 'OSS Version' ,
3031logger = logging .getLogger (constant .LOGGER_NAME )
3132
3233
33- def write_excel_and_csv (filename_without_extension , sheet_list , ignore_os = False ):
34- # sheet_list = {} // Key = Sheet_name, Value = list of [row_items]
34+ def write_excel_and_csv (filename_without_extension , sheet_list , ignore_os = False , extended_header = {}):
3535 success = True
3636 error_msg = ""
3737 success_csv = True
@@ -43,10 +43,11 @@ def write_excel_and_csv(filename_without_extension, sheet_list, ignore_os=False)
4343 output_dir = os .path .dirname (filename_without_extension )
4444 Path (output_dir ).mkdir (parents = True , exist_ok = True )
4545
46- success , error_msg = write_result_to_excel (filename_without_extension + ".xlsx" , sheet_list )
46+ success , error_msg = write_result_to_excel (filename_without_extension + ".xlsx" , sheet_list , extended_header )
4747
4848 if ignore_os or platform .system () != "Windows" :
49- success_csv , error_msg_csv = write_result_to_csv (filename_without_extension + ".csv" , sheet_list , True )
49+ success_csv , error_msg_csv = write_result_to_csv (filename_without_extension + ".csv" ,
50+ sheet_list , True , extended_header )
5051 if not success :
5152 error_msg = "[Error] Writing excel:" + error_msg
5253 if not success_csv :
@@ -82,18 +83,24 @@ def remove_empty_sheet(sheet_items):
8283 return success , final_sheet_to_print
8384
8485
85- def get_header_row (sheet_name , sheet_content ):
86+ def get_header_row (sheet_name , sheet_content , extended_header = {} ):
8687 selected_header = []
87- for header_key in _HEADER .keys ():
88- if header_key in sheet_name :
89- selected_header = _HEADER [header_key ]
90- break
91- if len (selected_header ) == 0 :
88+
89+ merged_headers = merge (_HEADER , extended_header )
90+
91+ selected_header = merged_headers .get (sheet_name )
92+ if not selected_header :
93+ for header_key in merged_headers .keys ():
94+ if sheet_name .startswith (header_key ):
95+ selected_header = merged_headers [header_key ]
96+ break
97+
98+ if not selected_header :
9299 selected_header = sheet_content .pop (0 )
93100 return selected_header , sheet_content
94101
95102
96- def write_result_to_csv (output_file , sheet_list_origin , separate_sheet = False ):
103+ def write_result_to_csv (output_file , sheet_list_origin , separate_sheet = False , extended_header = {} ):
97104 success = True
98105 error_msg = ""
99106 file_extension = ".csv"
@@ -111,7 +118,7 @@ def write_result_to_csv(output_file, sheet_list_origin, separate_sheet=False):
111118 merge_sheet = []
112119 for sheet_name , sheet_contents in sheet_list .items ():
113120 row_num = 1
114- header_row , sheet_content_without_header = get_header_row (sheet_name , sheet_contents [:])
121+ header_row , sheet_content_without_header = get_header_row (sheet_name , sheet_contents [:], extended_header )
115122
116123 if not separate_sheet :
117124 merge_sheet .extend (sheet_content_without_header )
@@ -136,9 +143,10 @@ def write_result_to_csv(output_file, sheet_list_origin, separate_sheet=False):
136143 return success , error_msg
137144
138145
139- def write_result_to_excel (out_file_name , sheet_list ):
146+ def write_result_to_excel (out_file_name , sheet_list , extended_header = {} ):
140147 success = True
141148 error_msg = ""
149+
142150 try :
143151 is_not_null , sheet_list = remove_empty_sheet (sheet_list )
144152 if is_not_null :
@@ -147,7 +155,7 @@ def write_result_to_excel(out_file_name, sheet_list):
147155
148156 workbook = xlsxwriter .Workbook (out_file_name )
149157 for sheet_name , sheet_contents in sheet_list .items ():
150- selected_header , sheet_content_without_header = get_header_row (sheet_name , sheet_contents [:])
158+ selected_header , sheet_content_without_header = get_header_row (sheet_name , sheet_contents [:], extended_header )
151159 worksheet = create_worksheet (workbook , sheet_name , selected_header )
152160 write_result_to_sheet (worksheet , sheet_content_without_header )
153161 workbook .close ()
0 commit comments