# -*- encoding: utf-8 -*-
import re
from jsonpath import jsonpath
from string import Template
from datetime import datetime
null = None
true = True
false = False
param_dict = {}
var_map = {}
# 构造一个参数结构体,param_data需要是字符串类型
def param_generate(param_data, result_json):
data = Template(param_data).safe_substitute(result_json)
try:
# 通过re正则表达式筛选出表达式 ${}内容jsonpath表达式
for expression in re.findall('\\${(.*?)}', data): # re.findall('\\${(
# .*?)}', data)存储jsonpath表达式列表 ,jsonpath表达式
# 用jsonpath取依赖的值
try:
result_value = jsonpath(result_json, expression)[0] #取单值还是多值
data = data.replace('${%s}' % expression, str(result_value))
except Exception as e:
return data
# 通过re正则表达式筛选出表达式 {{}}
for expression in re.findall('\\{{(.*?)}}',
data): # re.findall('\\{{(.*?)}}', data)遍历正则表达式,如果是变量名称 就新增变量或者替换变量值
# 使用变量构造器替换参数,判断是否存在变量字典里面
if expression in var_map.keys():
expression_value = str(var_map[expression])
data = data.replace('{{%s}}' % expression, expression_value)
else:
try:
param = param_genrate(expression)
data = data.replace('{{%s}}' % expression, str(param))
var_map[expression] = param
except Exception as e:
return data,var_map
return eval(data), param_dict
except Exception as e:
return data
# 获取当前时间精度为毫秒,不取到-3位置为微妙
now = datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]
# 通过前后缀和时间,构造一个随机变量
def param_genrate(str_prefix=None, str_suffix=None):
if str_prefix == None and str_suffix == None:
return now
elif str_prefix != None and str_suffix == None:
try:
param = str_prefix + now
except Exception as e:
raise e
return param
elif str_prefix == None and str_suffix != None:
try:
param = now + str_suffix
except Exception as e:
raise e
return param
elif str_prefix != None and str_suffix != None:
try:
param = str_prefix + now + str_suffix
except Exception as e:
raise e
return param
else:
raise "input error"
print(param_genrate("ee", "qq"))
result_json = {
"code": 200,
"msg": "SUCCESS",
"data": {
"pageSize": 10,
"pageIndex": 1,
"totalNum": 1124,
"totalPage": 113,
"result": [
{
"groupId": "0",
"materialCode": "T20221110-111150.377",
"materialName": "配件",
"status": "1",
"origin": "1",
"version": "1",
"buyType": "2",
"processRouteId": null,
"id": "1590542718290104321",
"createBy": "admin",
"createOn": "2022-11-10 11:11:50",
"updateBy": "admin",
"updateOn": "2022-11-10 11:11:50",
"isDeleted": false,
"remark": "适用于xxxxx"
},
{
"groupId": "0",
"materialCode": "T20221109-163526.563",
"materialName": "配件",
"status": "1",
"origin": "1",
"version": "1",
"buyType": "1",
"processRouteId": null,
"isDefaultVersion": false,
"id": "1590261768259899396",
"createBy": "admin",
"createOn": "2022-11-09 16:35:26",
"updateBy": "admin",
"updateOn": "2022-11-09 16:35:26",
"isDeleted": false,
"remark": "适用于xxxxx"
}
],
"extra": {}
}
}
param_data = {
"groupId": "0",
"materialCode": "{{materialCode}}",
"materialCode1": "${$..materialCode}",
"status": "1",
"origin": "1",
"version": "1",
"buyType": "1",
"processRouteId": null,
"id": "{{material_id}}",
"createBy": null,
"createOn": "2022-10-18 08:40:51",
"updateBy": "admin",
"updateOn": "2022-10-18 08:39:59",
"isDeleted": false,
"remark": "适用于xxxxx",
"dynamicList": [ ]
}
print(result_json)
print("++++++++++++++++++++++++++++++++++++++++")
print(param_data)
param_gen = param_generate(str(param_data), result_json)
print("===========-----------------============")
print(param_gen)
print(param_dict)
参数结构体构造器-第二版
于 2022-11-23 13:44:06 首次发布