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