Diseño de herramienta de verificación de comparación de campos de versión de actualización en caliente

Función realizada : al ingresar una URL del almacén, un número de versión anterior, un número de versión de destino y una lista de archivos a consultar en jenkins, jenkins puede consultar automáticamente si algunos campos en el contenido de los archivos a consultar en estas dos versiones han sido modificados llegan.

Implementar el diseño del proceso:

Diseño de procesos:

 

Entrada del resultado final:

 La salida resultante:

 Estructura del código:

 Detalles del código:

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

ManejarExcel.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

Supongo que te gusta

Origin blog.csdn.net/x_xingduo_2315/article/details/123813022
Recomendado
Clasificación