Skip to content

Commit 292dec7

Browse files
authored
Merge pull request #44 from fosslight/develop
Add extended header feature for additional information on excel
2 parents d886319 + 3b4371d commit 292dec7

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ coloredlogs
99
pygit2==1.6.1
1010
python3-wget
1111
beautifulsoup4
12+
jsonmerge

src/fosslight_util/output_format.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ def check_output_format(output='', format=''):
5151
return success, msg, output_path, output_file, output_extension
5252

5353

54-
def write_output_file(output_file_without_ext, file_extension, sheet_list):
54+
def write_output_file(output_file_without_ext, file_extension, sheet_list, extended_header={}):
5555
success = True
5656
msg = ''
5757

5858
if file_extension == '':
59-
success, msg = write_excel_and_csv(output_file_without_ext, sheet_list)
59+
success, msg = write_excel_and_csv(output_file_without_ext, sheet_list, False, extended_header)
6060
elif file_extension == '.xlsx':
61-
success, msg = write_result_to_excel(output_file_without_ext + file_extension, sheet_list)
61+
success, msg = write_result_to_excel(output_file_without_ext + file_extension, sheet_list, extended_header)
6262
elif file_extension == '.csv':
6363
success, msg = write_result_to_csv(output_file_without_ext + file_extension, sheet_list)
6464
elif file_extension == '.json':

src/fosslight_util/write_excel.py

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import copy
1313
from pathlib import Path
1414
import 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',
@@ -30,8 +31,7 @@
3031
logger = 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

Comments
 (0)