Skip to content

Commit daacbc3

Browse files
committed
feat: add recursive filtering for file_bytes in context data
1 parent 831c07d commit daacbc3

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ def valid_function(tool_lib, workspace_id):
126126
if not tool_lib.is_active:
127127
raise Exception(_("Tool is not active"))
128128

129+
def _filter_file_bytes(data):
130+
"""递归过滤掉所有层级的 file_bytes"""
131+
if isinstance(data, dict):
132+
return {k: _filter_file_bytes(v) for k, v in data.items() if k != 'file_bytes'}
133+
elif isinstance(data, list):
134+
return [_filter_file_bytes(item) for item in data]
135+
else:
136+
return data
137+
138+
129139

130140
class BaseToolLibNodeNode(IToolLibNode):
131141
def save_context(self, details, workflow_manage):
@@ -165,15 +175,8 @@ def execute(self, tool_lib_id, input_field_list, **kwargs) -> NodeResult:
165175
'kind') == 'data-source' else {}, _write_context=write_context)
166176

167177
def get_details(self, index: int, **kwargs):
168-
result = self.context.get('result')
169-
# 过滤掉 file_bytes
170-
if isinstance(result, dict) and 'file_bytes' in result:
171-
result = {k: v for k, v in result.items() if k != 'file_bytes'}
172-
elif isinstance(result, list):
173-
result = [
174-
{k: v for k, v in item.items() if k != 'file_bytes'} if isinstance(item, dict) else item
175-
for item in result
176-
]
178+
result = _filter_file_bytes(self.context.get('result'))
179+
177180
return {
178181
'name': self.node.properties.get('stepName'),
179182
"index": index,

apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@
99
from application.flow.i_step_node import NodeResult
1010
from application.flow.step_node.variable_aggregation_node.i_variable_aggregation_node import IVariableAggregation
1111

12+
def _filter_file_bytes(data):
13+
"""递归过滤掉所有层级的 file_bytes"""
14+
if isinstance(data, dict):
15+
return {k: _filter_file_bytes(v) for k, v in data.items() if k != 'file_bytes'}
16+
elif isinstance(data, list):
17+
return [_filter_file_bytes(item) for item in data]
18+
else:
19+
return data
20+
1221

1322
class BaseVariableAggregationNode(IVariableAggregation):
1423

@@ -63,14 +72,16 @@ def execute(self, strategy, group_list, **kwargs) -> NodeResult:
6372
{'result': result, 'strategy': strategy, 'group_list': self.reset_group_list(group_list), **result}, {})
6473

6574
def get_details(self, index: int, **kwargs):
75+
result = _filter_file_bytes(self.context.get('result'))
76+
group_list = _filter_file_bytes(self.context.get('group_list'))
6677
return {
6778
'name': self.node.properties.get('stepName'),
6879
"index": index,
6980
'run_time': self.context.get('run_time'),
7081
'type': self.node.type,
71-
'result': self.context.get('result'),
82+
'result': result,
7283
'strategy': self.context.get('strategy'),
73-
'group_list': self.context.get('group_list'),
84+
'group_list': group_list,
7485
'status': self.status,
7586
'err_message': self.err_message
7687
}

0 commit comments

Comments
 (0)