1. 程式人生 > 其它 >分片匹配模式,並按格式寫檔案內容

分片匹配模式,並按格式寫檔案內容

# -*- coding: utf-8 -*-
"""
1、解析封裝函式的模式
2、根據common檔案匹配def和api
3、把匹配的內容按格式填充到hub_api3檔案中
"""

import os
import re

# 記錄任務個數
SuccCount = 0
FailCount = 0

content = """
    @pin_action(
        "qctest/iotcloud/apiv3_monitor/topic_test/topic_test_common.py",
        "create_topic_policy",
        "CreateTopicPolicy",
    )
    def create_topic_policy(self, *args, **argv):
        \"""
        action: CreateTopicPolicy
        \"""
        return topic_test_common.create_topic_policy(*args, **argv)
"""


def write_format_content(file_name, def_name, api_name):
    format_string = """
    @pin_action(
        "qctest/iotcloud/api_test/%s",
        "%s",
        "%s",
    )
    def %s(self, *args, **argv):
        \"""
        action: %s
        \"""
        return topic_test_common.%s(*args, **argv)
    """ % (file_name, def_name, api_name, def_name, api_name, def_name)
    return format_string


def write_format_lib(dir_path):
    print(len(dir_path))
    for fl in dir_path:
        #print(fl)
        dir_path = re.findall(r'api_test/(.*?).py', fl)[0] + '.py'
        #print(type(dir_path))
        path = re.findall(r'(.*?)/', dir_path)[0]
        #print(path)
        file_name = re.findall(r'/(.*?).py', dir_path)[0]
        #print(file_name)

        format_string = """
        from qctest.iotcloud.api_test.%s import %s
        """ % (path, file_name)
        print(format_string)

        # with open('imoprt_lib.py', 'w') as f:
        #     f.write(format_string)
        #     f.write('\n')
        #     print(format_string)


def file_path_dir(path):
    g = os.walk(path)
    file_path_list = []
    for path, dir_list, file_list in g:
        for file_name in file_list:
            file_path = os.path.join(path, file_name)
            #print(file_path)
            if file_path.endswith('_common.py'):
                file_path_list.append(file_path)
                #print(file_path)
    return file_path_list

def str2Hump(text):
    #arr = filter(None, text.lower().split('_'))
    arr = text.lower().split('_')
    #print(arr)
    res = ''
    j = 0
    for i in arr:
        if j == 0:
            res = i[0].upper() + i[1:]
        else:
            res = res + i[0].upper() + i[1:]
        j += 1
    return res


if __name__ == '__main__':

    # 讀取common檔案
    dir_path = '/Users/mecexia/PycharmProjects/workspace/gitcode/IotTest/qctest/iotcloud/api_test'
    file_path_list = file_path_dir(dir_path)
    #write_format_lib(file_path_list)
    save_name = 'hub.py'
    with open(save_name, 'w') as f:
        for file_path in file_path_list:
            print(file_path)
            with open(file_path, 'r') as fs:
                common_content = fs.read()
            content_list = common_content.split('return rsp')
            #print(content_list)

            file_name = re.findall(r'api_test/(.*?).py', file_path)[0] + '.py'
            #print(file_name)
            api_name = []
            def_name = []
            for content in content_list:
                def_name_list = re.findall(r'def (.*?)\(', content)

                api_name_1 = re.findall(r"request\('(.*?)'", content)
                api_name_2 = re.findall(r'request\("(.*?)"', content)
                api_name_3 = re.findall(r'action = "(.*?)"', content)

                api_name_list = api_name_1 or api_name_2 or api_name_3
                if api_name_list:
                    # def_name.append(def_name_list[0])
                    def_name.extend(def_name_list)
                    # api_name.append(api_name_list[0])
                    api_name.extend(api_name_list)

            for i in range(0, len(def_name)):
                try:
                    format_string = write_format_content(file_name, def_name[i], api_name[i])
                    print("match success", def_name[i], api_name[i])
                    f.write(format_string)
                    f.write('\n')
                    SuccCount += 1
                except:
                    print("第{0}條資料處理失敗".format(def_name[i]))
                    print("第{0}條資料處理失敗".format(api_name[i]))
                    FailCount += 1

    print("SuccCount", SuccCount)
    print("FailCount", FailCount)