diff --git a/apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py b/apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py index 2d7b32883..d5799ae07 100644 --- a/apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py +++ b/apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py @@ -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): diff --git a/apps/application/flow/step_node/function_node/impl/base_function_node.py b/apps/application/flow/step_node/function_node/impl/base_function_node.py index a863d601b..38aec0689 100644 --- a/apps/application/flow/step_node/function_node/impl/base_function_node.py +++ b/apps/application/flow/step_node/function_node/impl/base_function_node.py @@ -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):