17777dab0Sopenharmony_ci#!/usr/bin/env python 27777dab0Sopenharmony_ci# -*- coding: utf-8 -*- 37777dab0Sopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd. 47777dab0Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 57777dab0Sopenharmony_ci# you may not use this file except in compliance with the License. 67777dab0Sopenharmony_ci# You may obtain a copy of the License at 77777dab0Sopenharmony_ci# 87777dab0Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 97777dab0Sopenharmony_ci# 107777dab0Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 117777dab0Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 127777dab0Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137777dab0Sopenharmony_ci# See the License for the specific language governing permissions and 147777dab0Sopenharmony_ci# limitations under the License. 157777dab0Sopenharmony_ci 167777dab0Sopenharmony_ciimport os 177777dab0Sopenharmony_ciimport stat 187777dab0Sopenharmony_ci 197777dab0Sopenharmony_ci 207777dab0Sopenharmony_cidef sort_by_kit(result_info_list: list, output_path): 217777dab0Sopenharmony_ci """ 227777dab0Sopenharmony_ci Description:列表按kit排序 237777dab0Sopenharmony_ci """ 247777dab0Sopenharmony_ci sort_by_kit_list = [] 257777dab0Sopenharmony_ci if 1 == len(result_info_list): 267777dab0Sopenharmony_ci sort_by_kit_list.extend(result_info_list) 277777dab0Sopenharmony_ci write_data_in_md(result_info_list[0].kit_name, result_info_list, output_path) 287777dab0Sopenharmony_ci return sort_by_kit_list 297777dab0Sopenharmony_ci if result_info_list: 307777dab0Sopenharmony_ci kit_list = sorted(result_info_list, key=lambda obj: obj.kit_name) 317777dab0Sopenharmony_ci first_kit_name = kit_list[0].kit_name 327777dab0Sopenharmony_ci same_element = [] 337777dab0Sopenharmony_ci for obj_element in kit_list: 347777dab0Sopenharmony_ci if obj_element.kit_name == first_kit_name: 357777dab0Sopenharmony_ci same_element.append(obj_element) 367777dab0Sopenharmony_ci else: 377777dab0Sopenharmony_ci sorted_data = sort_by_file_path(same_element) 387777dab0Sopenharmony_ci write_data_in_md(first_kit_name, sorted_data, output_path) 397777dab0Sopenharmony_ci sort_by_kit_list.extend(sorted_data) 407777dab0Sopenharmony_ci first_kit_name = obj_element.kit_name 417777dab0Sopenharmony_ci same_element = [obj_element] 427777dab0Sopenharmony_ci if same_element: 437777dab0Sopenharmony_ci sorted_data = sort_by_file_path(same_element) 447777dab0Sopenharmony_ci write_data_in_md(first_kit_name, sorted_data, output_path) 457777dab0Sopenharmony_ci sort_by_kit_list.extend(sorted_data) 467777dab0Sopenharmony_ci 477777dab0Sopenharmony_ci return sort_by_kit_list 487777dab0Sopenharmony_ci 497777dab0Sopenharmony_ci 507777dab0Sopenharmony_cidef sort_by_file_path(result_info_list_kit: list): 517777dab0Sopenharmony_ci """ 527777dab0Sopenharmony_ci Description:列表按文件路径排序 537777dab0Sopenharmony_ci """ 547777dab0Sopenharmony_ci sorted_by_file_list = [] 557777dab0Sopenharmony_ci if 1 == len(result_info_list_kit): 567777dab0Sopenharmony_ci sorted_by_file_list.extend(result_info_list_kit) 577777dab0Sopenharmony_ci return sorted_by_file_list 587777dab0Sopenharmony_ci if result_info_list_kit: 597777dab0Sopenharmony_ci file_list = sorted(result_info_list_kit, key=lambda obj: obj.api_file_path) 607777dab0Sopenharmony_ci first_file_name = file_list[0].api_file_path 617777dab0Sopenharmony_ci same_element = [] 627777dab0Sopenharmony_ci for obj_element in file_list: 637777dab0Sopenharmony_ci if obj_element.api_file_path == first_file_name: 647777dab0Sopenharmony_ci same_element.append(obj_element) 657777dab0Sopenharmony_ci else: 667777dab0Sopenharmony_ci sorted_data = sort_by_type(same_element) 677777dab0Sopenharmony_ci sorted_by_file_list.extend(sorted_data) 687777dab0Sopenharmony_ci first_file_name = obj_element.api_file_path 697777dab0Sopenharmony_ci same_element = [obj_element] 707777dab0Sopenharmony_ci if same_element: 717777dab0Sopenharmony_ci sorted_data = sort_by_type(same_element) 727777dab0Sopenharmony_ci sorted_by_file_list.extend(sorted_data) 737777dab0Sopenharmony_ci 747777dab0Sopenharmony_ci return sorted_by_file_list 757777dab0Sopenharmony_ci 767777dab0Sopenharmony_ci 777777dab0Sopenharmony_cidef sort_by_type(result_info_list_file: list): 787777dab0Sopenharmony_ci """ 797777dab0Sopenharmony_ci Description:列表按操作类型排序 807777dab0Sopenharmony_ci """ 817777dab0Sopenharmony_ci sorted_by_type_list = [] 827777dab0Sopenharmony_ci if result_info_list_file: 837777dab0Sopenharmony_ci sorted_by_type_list = sorted(result_info_list_file, key=lambda obj: obj.diff_type.name) 847777dab0Sopenharmony_ci 857777dab0Sopenharmony_ci return sorted_by_type_list 867777dab0Sopenharmony_ci 877777dab0Sopenharmony_ci 887777dab0Sopenharmony_cidef change_to_md_data(data): 897777dab0Sopenharmony_ci """ 907777dab0Sopenharmony_ci Description:将列表中字典元素数据转为str的数据 917777dab0Sopenharmony_ci """ 927777dab0Sopenharmony_ci headers = list(data[0].keys()) 937777dab0Sopenharmony_ci markdown_table = '{}{}{}'.format("|", "|".join(headers), "|\n") 947777dab0Sopenharmony_ci markdown_table += '{}{}{}'.format("|", "|".join(["---"] * len(headers)), "|\n") 957777dab0Sopenharmony_ci for element in data: 967777dab0Sopenharmony_ci markdown_table += '{}{}{}'.format("|", "|".join(str(element[header]) for header in headers), "|\n") 977777dab0Sopenharmony_ci return markdown_table 987777dab0Sopenharmony_ci 997777dab0Sopenharmony_ci 1007777dab0Sopenharmony_cidef change_list_obj_to_dict(list_of_obj: list): 1017777dab0Sopenharmony_ci """ 1027777dab0Sopenharmony_ci Description:将列表中对象元素数据转为字典元素数据 1037777dab0Sopenharmony_ci """ 1047777dab0Sopenharmony_ci data_list = [] 1057777dab0Sopenharmony_ci if list_of_obj: 1067777dab0Sopenharmony_ci for obj_element in list_of_obj: 1077777dab0Sopenharmony_ci obj_dict = { 1087777dab0Sopenharmony_ci '操作': obj_element.diff_type.name, 1097777dab0Sopenharmony_ci '旧版本': obj_element.old_api_full_text.replace('\n', '<br />'), 1107777dab0Sopenharmony_ci '新版本': obj_element.new_api_full_text.replace('\n', '<br />'), 1117777dab0Sopenharmony_ci '.h文件': obj_element.api_file_path 1127777dab0Sopenharmony_ci } 1137777dab0Sopenharmony_ci data_list.append(obj_dict) 1147777dab0Sopenharmony_ci 1157777dab0Sopenharmony_ci return data_list 1167777dab0Sopenharmony_ci 1177777dab0Sopenharmony_ci 1187777dab0Sopenharmony_cidef write_data_in_md(kit_name: str, write_data: list, output_path): 1197777dab0Sopenharmony_ci """ 1207777dab0Sopenharmony_ci Description:生成.md表格 1217777dab0Sopenharmony_ci """ 1227777dab0Sopenharmony_ci if not kit_name: 1237777dab0Sopenharmony_ci kit_name = r'nullOfKit' 1247777dab0Sopenharmony_ci file_name = '{}{}'.format(kit_name, '.md') 1257777dab0Sopenharmony_ci list_element_dict = change_list_obj_to_dict(write_data) 1267777dab0Sopenharmony_ci md_data = change_to_md_data(list_element_dict) 1277777dab0Sopenharmony_ci if md_data: 1287777dab0Sopenharmony_ci diff_str = r'diff合集' 1297777dab0Sopenharmony_ci path_str = os.path.abspath(os.path.join(output_path, diff_str)) 1307777dab0Sopenharmony_ci if not os.path.exists(path_str): 1317777dab0Sopenharmony_ci os.mkdir(path_str) 1327777dab0Sopenharmony_ci md_name = os.path.abspath(os.path.join(path_str, file_name)) 1337777dab0Sopenharmony_ci modes = stat.S_IRWXO | stat.S_IRWXG | stat.S_IRWXU 1347777dab0Sopenharmony_ci fd = os.open(md_name, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, mode=modes) 1357777dab0Sopenharmony_ci os.write(fd, md_data.encode()) 1367777dab0Sopenharmony_ci os.close(fd) 1377777dab0Sopenharmony_ci 1387777dab0Sopenharmony_ci 1397777dab0Sopenharmony_cidef write_md_entrance(result_info_list, output_path): 1407777dab0Sopenharmony_ci """ 1417777dab0Sopenharmony_ci Description:将数据生成.md表格入口 1427777dab0Sopenharmony_ci """ 1437777dab0Sopenharmony_ci sorted_data = sort_by_kit(result_info_list, output_path) 1447777dab0Sopenharmony_ci return sorted_data 145