Hot update version field comparison check tool design

Realized function : when inputting a warehouse URL, an old version number, a target version number, and a list of files to be queried on jenkins, jenkins can automatically query whether some fields in the content of the files to be queried in these two versions have been modified arrive.

Implement process design:

Process Design:

 

Final result input:

 The resulting output:

 Code structure:

 Code details:

SvnHandler.py

def svn_checkout():
    """
    co 配置文件
    :return:
    """
    cmd_co = "svn -r HEAD checkout %(url)s %(dist)s --username %(username)s --password %(password)s" % Setting.setting
    cmd_up = "svn up"
    if not os.path.exists(Setting.setting["dist"]):
        os.system(cmd_co)
    os.system(cmd_up)

def svn_up_to_rev(rev, filepaths):
    """
    更新到某一版本
    :return:
    """
    if filepaths is not None:
        cmd_up = "svn up -r %s %s" % (rev, filepaths)
        print("执行更新版本:%s" %rev)
        os.system(cmd_up)

def svn_get_info(rev, filenames, fieldnames, side):
    """
    获取svn信息
    cmd = svn log -v -r rev
    :return:value_list
    """
    file_list=[]
    if "," in filenames:
        file_list = "".join(filenames).split(",")
    else:
        file_list.append(filenames)
    files_dict = {}
    value_list = []
    svn_checkout()
    os.chdir(Setting.setting["dist"])
    for root, dirs, files in os.walk(Setting.setting["dist"]):
        for file in files:
            if file.endswith(".xlsx") or file.endswith(".xls"):
                _file = file.split(".")[0]
                files_dict[_file] = os.path.relpath(os.path.join(root, file), Setting.setting["dist"])
    for filename in file_list:
        if filename not in list(files_dict.keys()):
            print("输入的文件不存在!请确认文件名是否正确!")
            continue
        svn_up_to_rev(rev, files_dict[filename])
        info_cmd = "svn log -v -r %s %s" % (rev, files_dict[filename])
        svn_info = "".join(os.popen(info_cmd).readlines())
        if "Changed paths:" in svn_info:
            docs = svn_info.split("Changed paths:")[1].split("--")[0].strip().split("\n")
            for doc in docs:
                if any(st in doc for st in ("M /", "A /")) and any((doc.endswith(".xls"), doc.endswith(".xlsx"))):
                    file = doc.strip().split(" /")[1]
                    value_dict = HandleExcels.parse_excel(file, fieldnames, side)
                    value_list.append(value_dict)
                    return value_list
                else:
                    pass
        else:
            file_cmd = "svn log -v -r  %s" % (files_dict[filename])
            svn_rev_info = os.popen(file_cmd).readlines()
            rev_list = []
            for info in svn_rev_info:
                if " | " in info:
                    ve = "".join(re.findall("\d+", info.split(" | ")[0]))
                    rev_list.append(ve)
            rev_list.sort()
            last_list = []
            for _rev in rev_list:
                if int(_rev) < int(rev):
                    last_list.append(int(_rev))
            last_list.sort()
            last_rev = last_list[-1]
            svn_up_to_rev(last_rev, files_dict[filename])
            value_dict = HandleExcels.parse_excel(files_dict[filename], fieldnames, side)
            value_list.append(value_dict)
            # print("value_list",value_list)
    return value_list

def get_files(rev, parameters):
    """
    获取文件路径
    :return:
    """
    file_list = svn_get_info(rev, parameters)
    root = os.getcwd()
    file_paths = []
    for file in file_list:
        path = os.path.join(root, file)
        _file_path = path.replace("\\", "/")
        file_paths.append(_file_path)
    print(file_paths)
    return file_paths

HandleExcel.py

def open_excel(file_path):
    try:
        excel = xlrd.open_workbook(file_path)
        return excel
    except Exception as e:
        print("打开Excel错误!")

def verify_table(table):
    """
    验证sheet是否有效
    :param table:
    :param sheet_name:
    :return:
    """
    if table.nrows < 5 or table.ncols < 2:
        return False
    clientstr = "".join(table.cell_value(2, 0)).lower()
    serverstr = "".join(table.cell_value(4, 0)).lower()
    if 'client' not in clientstr:
        return False
    if 'server' not in serverstr:
        return False
    return True

def parse_excel(file_path, fieldnames, side):
    """
    解析Excel表格内容
    :return:value_dict
    """
    os.chdir(Setting.setting["dist"])
    excel = open_excel(file_path)
    sheet_names = excel.sheet_names()
    value_dict = {}
    for sheet in sheet_names:
        table = excel.sheet_by_name(sheet)
        if not table:
            print("table为空")
            continue
        if not verify_table(table):
            continue
        client_key = {}
        data_type = {}
        server_key = {}
        for col in range(1, table.ncols):
            client_key[col] = table.cell_value(2, col)
            data_type[col] = table.cell_value(3, col)
            server_key[col] = table.cell_value(4, col)
        key = 0
        if "," in fieldnames:
            fieldname = str(fieldnames).split(",")
            for fieldname in fieldname:
                if side in ["client", "client_and_server"]:
                    key = [k for k, v in client_key.items() if v == fieldname]
                elif side == "server":
                    key = [k for k, v in server_key.items() if v == fieldname]
                for row in range(5, table.nrows):
                    id = table.cell_value(row, 1)
                    if id == "":
                        continue
                    value = table.cell_value(row, int("".join([str(x)for x in key])))
                    key_tuple = (sheet, row, int("".join([str(x)for x in key])))
                    if value == "":
                        continue
                    value_dict[key_tuple] = value
        else:
            fieldname = fieldnames
            if side in ["client" , "client_and_server"]:
                key = [k for k, v in client_key.items() if v == fieldname]
            elif side == "server":
                key = [k for k, v in server_key.items() if v == fieldname]
            for row in range(5, table.nrows):
                id = table.cell_value(row, 1)
                if id == "":
                    continue
                value = table.cell_value(row, int("".join([str(x)for x in key])))
                key_tuple = (sheet, row, int("".join([str(x)for x in key])))
                if value == "":
                    continue
                value_dict[key_tuple] = value
    # print("value_dict",value_dict)
    return value_dict

Guess you like

Origin blog.csdn.net/x_xingduo_2315/article/details/123813022