参数结构体构造器-第二版

# -*- 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值