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