|
2 | 2 | # -*- coding: utf-8 -*- |
3 | 3 | # Copyright (c) 2021 LG Electronics Inc. |
4 | 4 | # SPDX-License-Identifier: GPL-3.0-only |
5 | | - |
6 | | -import xlrd |
7 | 5 | import logging |
8 | 6 | import os |
9 | | -import json |
10 | 7 | import yaml |
11 | 8 | from fosslight_util.constant import LOGGER_NAME |
12 | | -from fosslight_util.oss_item import OssItem |
13 | | -from fosslight_util.parsing_yaml import find_all_oss_pkg_files, parsing_yml, set_value_switch |
| 9 | +from fosslight_util.parsing_yaml import find_all_oss_pkg_files, parsing_yml |
14 | 10 | from fosslight_util.write_excel import write_result_to_excel, write_result_to_csv |
15 | 11 | from fosslight_util.write_yaml import create_yaml_with_ossitem |
| 12 | +from fosslight_util.read_excel import read_oss_report |
16 | 13 |
|
17 | 14 | logger = logging.getLogger(LOGGER_NAME) |
18 | 15 | IDX_CANNOT_FOUND = -1 |
@@ -78,87 +75,3 @@ def convert_excel_to_yaml(oss_report_to_read, output_file, sheet_names=""): |
78 | 75 | def write_yaml_file(output_file, json_output): |
79 | 76 | with open(output_file, 'w') as f: |
80 | 77 | yaml.dump(json_output, f, sort_keys=False) |
81 | | - |
82 | | - |
83 | | -def read_oss_report(excel_file, sheet_names=""): |
84 | | - _oss_report_items = [] |
85 | | - _xl_sheets = [] |
86 | | - SHEET_PREFIX_TO_READ = ["bin", "bom", "src"] |
87 | | - if sheet_names: |
88 | | - sheet_name_prefix_math = False |
89 | | - sheet_name_to_read = sheet_names.split(",") |
90 | | - else: |
91 | | - sheet_name_prefix_math = True |
92 | | - sheet_name_to_read = SHEET_PREFIX_TO_READ |
93 | | - |
94 | | - try: |
95 | | - logger.info(f"Read data from : {excel_file}") |
96 | | - xl_workbook = xlrd.open_workbook(excel_file) |
97 | | - for sheet_name in xl_workbook.sheet_names(): |
98 | | - try: |
99 | | - sheet_name_lower = sheet_name.lower() |
100 | | - if any(((sheet_name_prefix_math and sheet_name_lower.startswith(sheet_to_read.lower())) |
101 | | - or sheet_name_lower == sheet_to_read.lower()) |
102 | | - for sheet_to_read in sheet_name_to_read): |
103 | | - sheet = xl_workbook.sheet_by_name(sheet_name) |
104 | | - if sheet: |
105 | | - logger.info(f"Load a sheet: {sheet_name}") |
106 | | - _xl_sheets.append(sheet) |
107 | | - except Exception as error: |
108 | | - logger.debug(f"Failed to load sheet: {sheet_name} {error}") |
109 | | - |
110 | | - for xl_sheet in _xl_sheets: |
111 | | - _item_idx = { |
112 | | - "ID": IDX_CANNOT_FOUND, |
113 | | - "Source Name or Path": IDX_CANNOT_FOUND, |
114 | | - "Binary Name": IDX_CANNOT_FOUND, |
115 | | - "OSS Name": IDX_CANNOT_FOUND, |
116 | | - "OSS Version": IDX_CANNOT_FOUND, |
117 | | - "License": IDX_CANNOT_FOUND, |
118 | | - "Download Location": IDX_CANNOT_FOUND, |
119 | | - "Homepage": IDX_CANNOT_FOUND, |
120 | | - "Exclude": IDX_CANNOT_FOUND, |
121 | | - "Copyright Text": IDX_CANNOT_FOUND, |
122 | | - "Comment": IDX_CANNOT_FOUND, |
123 | | - "File Name or Path": IDX_CANNOT_FOUND |
124 | | - } |
125 | | - num_cols = xl_sheet.ncols |
126 | | - num_rows = xl_sheet.nrows |
127 | | - MAX_FIND_HEADER_COLUMN = 5 if num_rows > 5 else num_rows |
128 | | - DATA_START_ROW_IDX = 1 |
129 | | - for row_idx in range(0, MAX_FIND_HEADER_COLUMN): |
130 | | - for col_idx in range(row_idx, num_cols): |
131 | | - cell_obj = xl_sheet.cell(row_idx, col_idx) |
132 | | - if cell_obj.value in _item_idx: |
133 | | - _item_idx[cell_obj.value] = col_idx |
134 | | - |
135 | | - if len([key for key, value in _item_idx.items() if value != IDX_CANNOT_FOUND]) > 3: |
136 | | - DATA_START_ROW_IDX = row_idx + 1 |
137 | | - break |
138 | | - |
139 | | - # Get all values, iterating through rows and columns |
140 | | - column_keys = json.loads(json.dumps(_item_idx)) |
141 | | - |
142 | | - for row_idx in range(DATA_START_ROW_IDX, xl_sheet.nrows): |
143 | | - item = OssItem("") |
144 | | - valid_row = True |
145 | | - load_data_cnt = 0 |
146 | | - |
147 | | - for column_key, column_idx in column_keys.items(): |
148 | | - if column_idx != IDX_CANNOT_FOUND: |
149 | | - cell_obj = xl_sheet.cell(row_idx, column_idx) |
150 | | - cell_value = cell_obj.value |
151 | | - if cell_value != "": |
152 | | - if column_key != "ID": |
153 | | - if column_key: |
154 | | - column_key = column_key.lower().strip() |
155 | | - set_value_switch(item, column_key, cell_value) |
156 | | - load_data_cnt += 1 |
157 | | - else: |
158 | | - valid_row = False if cell_value == "-" else True |
159 | | - if valid_row and load_data_cnt > 0: |
160 | | - _oss_report_items.append(item) |
161 | | - |
162 | | - except Exception as error: |
163 | | - logger.error(f"Parsing a OSS Report: {error}") |
164 | | - return _oss_report_items |
0 commit comments