修复部分自定义函数如{{random_id_card()}}不带参数调用是,可能出现调用函数不正确的bug
This commit is contained in:
parent
5c3909e1d6
commit
b1a24049f1
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module version="4">
|
<module version="4">
|
||||||
<component name="PyDocumentationSettings">
|
<component name="PyDocumentationSettings">
|
||||||
<option name="format" value="PLAIN" />
|
<option name="format" value="GOOGLE" />
|
||||||
<option name="myDocStringFormat" value="Plain" />
|
<option name="myDocStringFormat" value="Google" />
|
||||||
</component>
|
</component>
|
||||||
<component name="TemplatesService">
|
<component name="TemplatesService">
|
||||||
<option name="TEMPLATE_FOLDERS">
|
<option name="TEMPLATE_FOLDERS">
|
||||||
|
|
|
@ -16,7 +16,7 @@ __all__ = [
|
||||||
"random_string", "random_ssn",
|
"random_string", "random_ssn",
|
||||||
"random_email", "random_id_card",
|
"random_email", "random_id_card",
|
||||||
"random_int", "random_male_name",
|
"random_int", "random_male_name",
|
||||||
"random_female_name", "random_current_time"
|
"random_female_name", "random_current_time",
|
||||||
]
|
]
|
||||||
|
|
||||||
f = Faker(locale='Zh-CN')
|
f = Faker(locale='Zh-CN')
|
||||||
|
|
|
@ -31,8 +31,11 @@ class DependentParameter(DataExtractor):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def execute_method_chain(obj, methods, args=None):
|
def execute_method_chain(obj, methods, args=None):
|
||||||
|
"""处理参数为调用链的函数"""
|
||||||
if not methods:
|
if not methods:
|
||||||
|
if args and args[0]:
|
||||||
return obj(*args) if callable(obj) else obj
|
return obj(*args) if callable(obj) else obj
|
||||||
|
return obj() if callable(obj) else obj
|
||||||
method_name, *remaining_methods = methods
|
method_name, *remaining_methods = methods
|
||||||
if hasattr(obj(), method_name) and callable(getattr(obj(), method_name)):
|
if hasattr(obj(), method_name) and callable(getattr(obj(), method_name)):
|
||||||
method = getattr(obj(), method_name)
|
method = getattr(obj(), method_name)
|
||||||
|
@ -40,14 +43,16 @@ class DependentParameter(DataExtractor):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_method_call_and_method_names(strings):
|
def get_method_call_and_method_names(strings):
|
||||||
|
"""获取方法命名及参数列表"""
|
||||||
first_method_call_match = self.FUNCTION_CALL_MATCHER.search(strings)
|
first_method_call_match = self.FUNCTION_CALL_MATCHER.search(strings)
|
||||||
if first_method_call_match:
|
if first_method_call_match:
|
||||||
first_method_call = "{{" + f'{first_method_call_match.group()}'.split("(")[0] + "()" + "}}"
|
first_method_call = "{{" + f'{first_method_call_match.group()}'.split("(")[0] + "()" + "}}"
|
||||||
first_fun = first_method_call_match.group()
|
first_fun = first_method_call_match.group()
|
||||||
args_string = self.ARGS_MATCHER.search(first_method_call_match.group())
|
args_string = self.ARGS_MATCHER.search(first_method_call_match.group())
|
||||||
|
# 获取字符串参数
|
||||||
args_list = args_string.group(1).split(',') if args_string else []
|
args_list = args_string.group(1).split(',') if args_string else []
|
||||||
else:
|
else:
|
||||||
raise ParameterExtractionError(key, "在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常")
|
raise ParameterExtractionError(strings, "在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常")
|
||||||
|
|
||||||
# raise ValueError(f"函数写法错误:无法匹配函数调用格式,字符串为:{strings}")
|
# raise ValueError(f"函数写法错误:无法匹配函数调用格式,字符串为:{strings}")
|
||||||
remaining_method_names = self.METHOD_NAME_MATCHER.findall(strings)
|
remaining_method_names = self.METHOD_NAME_MATCHER.findall(strings)
|
||||||
|
@ -58,6 +63,7 @@ class DependentParameter(DataExtractor):
|
||||||
json_string = json.dumps(json_string) if isinstance(json_string, (dict, list)) else json_string
|
json_string = json.dumps(json_string) if isinstance(json_string, (dict, list)) else json_string
|
||||||
while self.PARAMETER_MATCHER.search(json_string):
|
while self.PARAMETER_MATCHER.search(json_string):
|
||||||
if self.FUNCTION_CHAIN_MATCHER.search(json_string):
|
if self.FUNCTION_CHAIN_MATCHER.search(json_string):
|
||||||
|
# 匹配调用链
|
||||||
function_pattern = self.FUNCTION_CHAIN_MATCHER.search(json_string).group()
|
function_pattern = self.FUNCTION_CHAIN_MATCHER.search(json_string).group()
|
||||||
function_with_args, key, remaining_methods, args = get_method_call_and_method_names(function_pattern)
|
function_with_args, key, remaining_methods, args = get_method_call_and_method_names(function_pattern)
|
||||||
if key in self.get_environments().keys():
|
if key in self.get_environments().keys():
|
||||||
|
@ -66,7 +72,6 @@ class DependentParameter(DataExtractor):
|
||||||
json_string = json_string.replace(function_pattern, str(obj))
|
json_string = json_string.replace(function_pattern, str(obj))
|
||||||
else:
|
else:
|
||||||
ParameterExtractionError(key, "在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常")
|
ParameterExtractionError(key, "在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常")
|
||||||
# logger.error(f"函数key:{key},在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常\n")
|
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
key = self.PARAMETER_MATCHER.search(json_string)
|
key = self.PARAMETER_MATCHER.search(json_string)
|
||||||
|
@ -81,20 +86,21 @@ class DependentParameter(DataExtractor):
|
||||||
json_string = json_string.replace(key.group(), str(obj))
|
json_string = json_string.replace(key.group(), str(obj))
|
||||||
else:
|
else:
|
||||||
ParameterExtractionError(key, "在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常")
|
ParameterExtractionError(key, "在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常")
|
||||||
# logger.error(f"字符串key:{key},字符串在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常\n")
|
|
||||||
break
|
break
|
||||||
json_string = json_string.replace("True", "true").replace("False", "false")
|
json_string = json_string.replace("True", "true").replace("False", "false")
|
||||||
if self.BRACE_MATCHER.search(json_string) and not self.FUNCTION_CHAIN_MATCHER.search(json_string):
|
if self.BRACE_MATCHER.search(json_string) and not self.FUNCTION_CHAIN_MATCHER.search(json_string):
|
||||||
try:
|
try:
|
||||||
json_string = json.loads(json_string)
|
json_string = json.loads(json_string)
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
ResponseJsonConversionError(json_string,e)
|
ResponseJsonConversionError(json_string, e)
|
||||||
# logger.error(f"JSONDecodeError:{json_string}:{e}")
|
|
||||||
return json_string
|
return json_string
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from common.utils.environments import Environments
|
from common.validation import loaders
|
||||||
|
from common import bif_functions
|
||||||
|
|
||||||
|
loader = loaders.Loaders()
|
||||||
|
|
||||||
dps = {
|
dps = {
|
||||||
"{{var_a}}": "foo",
|
"{{var_a}}": "foo",
|
||||||
|
@ -105,13 +111,8 @@ if __name__ == '__main__':
|
||||||
"{{var_f}}": ["baz", False],
|
"{{var_f}}": ["baz", False],
|
||||||
"{{var_g}}": {'g': 'gg', 'g1': 'gg', 'g2': 'gg2'}
|
"{{var_g}}": {'g': 'gg', 'g1': 'gg', 'g2': 'gg2'}
|
||||||
}
|
}
|
||||||
|
loader.set_environments(dps)
|
||||||
d = Environments()
|
loader.set_bif_fun(bif_functions)
|
||||||
d.set_environments(dps)
|
|
||||||
from common.validation import loaders
|
|
||||||
from common import bif_functions
|
|
||||||
|
|
||||||
loaders.Loaders().set_bif_fun(bif_functions)
|
|
||||||
dat = {
|
dat = {
|
||||||
"a": "{{var_a}}",
|
"a": "{{var_a}}",
|
||||||
"b": {"c": "{{var_c}}", "d": "{{var_d}}", "e": ["{{var_e_1}}", "{{var_e_2}}"]},
|
"b": {"c": "{{var_c}}", "d": "{{var_d}}", "e": ["{{var_e_1}}", "{{var_e_2}}"]},
|
||||||
|
@ -119,8 +120,9 @@ if __name__ == '__main__':
|
||||||
"g": "{{var_g}}",
|
"g": "{{var_g}}",
|
||||||
"t": "{{get_timestamp()}}",
|
"t": "{{get_timestamp()}}",
|
||||||
"fk": "{{fk().email()}}",
|
"fk": "{{fk().email()}}",
|
||||||
"rt": "{{fk().ean(length=13)}}",
|
"ft": "{{fk().ean(length=13)}}",
|
||||||
"st": "{{ms_fmt_hms(2000)}}"
|
"st": "{{ms_fmt_hms(2000)}}",
|
||||||
|
"time": "{{random_id_card()}}",
|
||||||
}
|
}
|
||||||
d = DependentParameter()
|
ret = loader.replace_dependent_parameter(dat)
|
||||||
print(d.replace_dependent_parameter(dat))
|
print(ret)
|
||||||
|
|
Loading…
Reference in New Issue