#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2024 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import stat
def sort_by_kit(result_info_list: list, output_path):
"""
Description:列表按kit排序
"""
sort_by_kit_list = []
if 1 == len(result_info_list):
sort_by_kit_list.extend(result_info_list)
write_data_in_md(result_info_list[0].kit_name, result_info_list, output_path)
return sort_by_kit_list
if result_info_list:
kit_list = sorted(result_info_list, key=lambda obj: obj.kit_name)
first_kit_name = kit_list[0].kit_name
same_element = []
for obj_element in kit_list:
if obj_element.kit_name == first_kit_name:
same_element.append(obj_element)
else:
sorted_data = sort_by_file_path(same_element)
write_data_in_md(first_kit_name, sorted_data, output_path)
sort_by_kit_list.extend(sorted_data)
first_kit_name = obj_element.kit_name
same_element = [obj_element]
if same_element:
sorted_data = sort_by_file_path(same_element)
write_data_in_md(first_kit_name, sorted_data, output_path)
sort_by_kit_list.extend(sorted_data)
return sort_by_kit_list
def sort_by_file_path(result_info_list_kit: list):
"""
Description:列表按文件路径排序
"""
sorted_by_file_list = []
if 1 == len(result_info_list_kit):
sorted_by_file_list.extend(result_info_list_kit)
return sorted_by_file_list
if result_info_list_kit:
file_list = sorted(result_info_list_kit, key=lambda obj: obj.api_file_path)
first_file_name = file_list[0].api_file_path
same_element = []
for obj_element in file_list:
if obj_element.api_file_path == first_file_name:
same_element.append(obj_element)
else:
sorted_data = sort_by_type(same_element)
sorted_by_file_list.extend(sorted_data)
first_file_name = obj_element.api_file_path
same_element = [obj_element]
if same_element:
sorted_data = sort_by_type(same_element)
sorted_by_file_list.extend(sorted_data)
return sorted_by_file_list
def sort_by_type(result_info_list_file: list):
"""
Description:列表按操作类型排序
"""
sorted_by_type_list = []
if result_info_list_file:
sorted_by_type_list = sorted(result_info_list_file, key=lambda obj: obj.diff_type.name)
return sorted_by_type_list
def change_to_md_data(data):
"""
Description:将列表中字典元素数据转为str的数据
"""
headers = list(data[0].keys())
markdown_table = '{}{}{}'.format("|", "|".join(headers), "|\n")
markdown_table += '{}{}{}'.format("|", "|".join(["---"] * len(headers)), "|\n")
for element in data:
markdown_table += '{}{}{}'.format("|", "|".join(str(element[header]) for header in headers), "|\n")
return markdown_table
def change_list_obj_to_dict(list_of_obj: list):
"""
Description:将列表中对象元素数据转为字典元素数据
"""
data_list = []
if list_of_obj:
for obj_element in list_of_obj:
obj_dict = {
'操作': obj_element.diff_type.name,
'旧版本': obj_element.old_api_full_text.replace('\n', '
'),
'新版本': obj_element.new_api_full_text.replace('\n', '
'),
'.h文件': obj_element.api_file_path
}
data_list.append(obj_dict)
return data_list
def write_data_in_md(kit_name: str, write_data: list, output_path):
"""
Description:生成.md表格
"""
if not kit_name:
kit_name = r'nullOfKit'
file_name = '{}{}'.format(kit_name, '.md')
list_element_dict = change_list_obj_to_dict(write_data)
md_data = change_to_md_data(list_element_dict)
if md_data:
diff_str = r'diff合集'
path_str = os.path.abspath(os.path.join(output_path, diff_str))
if not os.path.exists(path_str):
os.mkdir(path_str)
md_name = os.path.abspath(os.path.join(path_str, file_name))
modes = stat.S_IRWXO | stat.S_IRWXG | stat.S_IRWXU
fd = os.open(md_name, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, mode=modes)
os.write(fd, md_data.encode())
os.close(fd)
def write_md_entrance(result_info_list, output_path):
"""
Description:将数据生成.md表格入口
"""
sorted_data = sort_by_kit(result_info_list, output_path)
return sorted_data