fix: 修复工作流函数节点输入参数类型未校验

This commit is contained in:
zhangshaohu 2024-08-27 21:44:33 +08:00 committed by shaohuzhang1
parent ba60b3c47c
commit e6045f439e
2 changed files with 48 additions and 6 deletions

View File

@ -42,6 +42,20 @@ def get_field_value(debug_field_list, name, is_required):
return None
def valid_reference_value(_type, value, name):
if _type == 'int':
return isinstance(value, int)
if _type == 'float':
return isinstance(value, float)
if _type == 'dict':
return isinstance(value, dict)
if _type == 'array':
return isinstance(value, list)
if _type == 'string':
return isinstance(value, str)
raise Exception(500, f'字段:{name}类型:{_type}值:{value}类型错误')
def convert_value(name: str, value, _type, is_required, source, node):
if not is_required and value is None:
return None
@ -49,6 +63,7 @@ def convert_value(name: str, value, _type, is_required, source, node):
value = node.workflow_manage.get_reference_field(
value[0],
value[1:])
valid_reference_value(_type, value, name)
return value
try:
if _type == 'int':
@ -56,12 +71,18 @@ def convert_value(name: str, value, _type, is_required, source, node):
if _type == 'float':
return float(value)
if _type == 'dict':
return json.loads(value)
v = json.loads(value)
if isinstance(v, dict):
return v
raise Exception("类型错误")
if _type == 'array':
return json.loads(value)
v = json.loads(value)
if isinstance(v, list):
return v
raise Exception("类型错误")
return value
except Exception as e:
raise AppApiException(500, f'字段:{name}类型:{_type}值:{value}类型转换错误')
raise Exception(f'字段:{name}类型:{_type}值:{value}类型错误')
class BaseFunctionLibNodeNode(IFunctionLibNode):

View File

@ -31,6 +31,20 @@ def write_context(step_variable: Dict, global_variable: Dict, node, workflow):
node.context['run_time'] = time.time() - node.context['start_time']
def valid_reference_value(_type, value, name):
if _type == 'int':
return isinstance(value, int)
if _type == 'float':
return isinstance(value, float)
if _type == 'dict':
return isinstance(value, dict)
if _type == 'array':
return isinstance(value, list)
if _type == 'string':
return isinstance(value, str)
raise Exception(500, f'字段:{name}类型:{_type}值:{value}类型错误')
def convert_value(name: str, value, _type, is_required, source, node):
if not is_required and value is None:
return None
@ -38,6 +52,7 @@ def convert_value(name: str, value, _type, is_required, source, node):
value = node.workflow_manage.get_reference_field(
value[0],
value[1:])
valid_reference_value(_type, value, name)
return value
try:
if _type == 'int':
@ -45,12 +60,18 @@ def convert_value(name: str, value, _type, is_required, source, node):
if _type == 'float':
return float(value)
if _type == 'dict':
return json.loads(value)
v = json.loads(value)
if isinstance(v, dict):
return v
raise Exception("类型错误")
if _type == 'array':
return json.loads(value)
v = json.loads(value)
if isinstance(v, list):
return v
raise Exception("类型错误")
return value
except Exception as e:
raise AppApiException(500, f'字段:{name}类型:{_type}值:{value}类型转换错误')
raise Exception(f'字段:{name}类型:{_type}值:{value}类型错误')
class BaseFunctionNodeNode(IFunctionNode):