Skip to content

Commit bf1062f

Browse files
committed
fix: improve error handling in valid_reference_value function
1 parent 7ec7984 commit bf1062f

2 files changed

Lines changed: 52 additions & 43 deletions

File tree

apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
from common.utils.rsa_util import rsa_long_decrypt
2121
from common.utils.tool_code import ToolExecutor
2222
from maxkb.const import CONFIG
23-
from system_manage.models import AuthTargetType
24-
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
2523
from tools.models import Tool
2624

2725
function_executor = ToolExecutor(CONFIG.get('SANDBOX'))
@@ -48,23 +46,30 @@ def get_field_value(debug_field_list, name, is_required):
4846

4947

5048
def valid_reference_value(_type, value, name):
51-
if _type == 'int':
52-
instance_type = int | float
53-
elif _type == 'float':
54-
instance_type = float | int
55-
elif _type == 'dict':
56-
instance_type = dict
57-
elif _type == 'array':
58-
instance_type = list
59-
elif _type == 'string':
60-
instance_type = str
61-
else:
62-
raise Exception(_('Field: {name} Type: {_type} Value: {value} Unsupported types').format(name=name,
63-
_type=_type))
49+
try:
50+
if _type == 'int':
51+
instance_type = int | float
52+
elif _type == 'float':
53+
instance_type = float | int
54+
elif _type == 'dict':
55+
value = json.loads(value) if isinstance(value, str) else value
56+
instance_type = dict
57+
elif _type == 'array':
58+
value = json.loads(value) if isinstance(value, str) else value
59+
instance_type = list
60+
elif _type == 'string':
61+
instance_type = str
62+
else:
63+
raise Exception(_(
64+
'Field: {name} Type: {_type} Value: {value} Unsupported types'
65+
).format(name=name, _type=_type))
66+
except:
67+
return value
6468
if not isinstance(value, instance_type):
65-
raise Exception(
66-
_('Field: {name} Type: {_type} Value: {value} Type error').format(name=name, _type=_type,
67-
value=value))
69+
raise Exception(_(
70+
'Field: {name} Type: {_type} Value: {value} Type error'
71+
).format(name=name, _type=_type, value=value))
72+
return value
6873

6974

7075
def convert_value(name: str, value, _type, is_required, source, node):
@@ -76,12 +81,8 @@ def convert_value(name: str, value, _type, is_required, source, node):
7681
value = node.workflow_manage.get_reference_field(
7782
value[0],
7883
value[1:])
79-
if isinstance(value, str):
80-
try:
81-
value = json.loads(value)
82-
except:
83-
pass
84-
valid_reference_value(_type, value, name)
84+
85+
value = valid_reference_value(_type, value, name)
8586
if _type == 'int':
8687
return int(value)
8788
if _type == 'float':

apps/application/flow/step_node/tool_node/impl/base_tool_node.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import time
1111
from typing import Dict
1212

13+
from django.utils.translation import gettext as _
14+
1315
from application.flow.i_step_node import NodeResult
1416
from application.flow.step_node.tool_node.i_tool_node import IToolNode
1517
from common.utils.tool_code import ToolExecutor
@@ -30,20 +32,30 @@ def write_context(step_variable: Dict, global_variable: Dict, node, workflow):
3032

3133

3234
def valid_reference_value(_type, value, name):
33-
if _type == 'int':
34-
instance_type = int | float
35-
elif _type == 'float':
36-
instance_type = float | int
37-
elif _type == 'dict':
38-
instance_type = dict
39-
elif _type == 'array':
40-
instance_type = list
41-
elif _type == 'string':
42-
instance_type = str
43-
else:
44-
raise Exception(500, f'字段:{name}类型:{_type} 不支持的类型')
35+
try:
36+
if _type == 'int':
37+
instance_type = int | float
38+
elif _type == 'float':
39+
instance_type = float | int
40+
elif _type == 'dict':
41+
value = json.loads(value) if isinstance(value, str) else value
42+
instance_type = dict
43+
elif _type == 'array':
44+
value = json.loads(value) if isinstance(value, str) else value
45+
instance_type = list
46+
elif _type == 'string':
47+
instance_type = str
48+
else:
49+
raise Exception(_(
50+
'Field: {name} Type: {_type} Value: {value} Unsupported types'
51+
).format(name=name, _type=_type))
52+
except:
53+
return value
4554
if not isinstance(value, instance_type):
46-
raise Exception(f'字段:{name}类型:{_type}值:{value}类型错误')
55+
raise Exception(_(
56+
'Field: {name} Type: {_type} Value: {value} Type error'
57+
).format(name=name, _type=_type, value=value))
58+
return value
4759

4860

4961
def convert_value(name: str, value, _type, is_required, source, node):
@@ -53,12 +65,8 @@ def convert_value(name: str, value, _type, is_required, source, node):
5365
value = node.workflow_manage.get_reference_field(
5466
value[0],
5567
value[1:])
56-
if isinstance(value, str):
57-
try:
58-
value = json.loads(value)
59-
except:
60-
pass
61-
valid_reference_value(_type, value, name)
68+
69+
value = valid_reference_value(_type, value, name)
6270
if _type == 'int':
6371
return int(value)
6472
if _type == 'float':

0 commit comments

Comments
 (0)