diff --git a/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py b/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py index 60fff7bc0..66dc921b8 100644 --- a/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py +++ b/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py @@ -126,6 +126,16 @@ def valid_function(tool_lib, workspace_id): if not tool_lib.is_active: raise Exception(_("Tool is not active")) +def _filter_file_bytes(data): + """递归过滤掉所有层级的 file_bytes""" + if isinstance(data, dict): + return {k: _filter_file_bytes(v) for k, v in data.items() if k != 'file_bytes'} + elif isinstance(data, list): + return [_filter_file_bytes(item) for item in data] + else: + return data + + class BaseToolLibNodeNode(IToolLibNode): def save_context(self, details, workflow_manage): @@ -165,15 +175,8 @@ class BaseToolLibNodeNode(IToolLibNode): 'kind') == 'data-source' else {}, _write_context=write_context) def get_details(self, index: int, **kwargs): - result = self.context.get('result') - # 过滤掉 file_bytes - if isinstance(result, dict) and 'file_bytes' in result: - result = {k: v for k, v in result.items() if k != 'file_bytes'} - elif isinstance(result, list): - result = [ - {k: v for k, v in item.items() if k != 'file_bytes'} if isinstance(item, dict) else item - for item in result - ] + result = _filter_file_bytes(self.context.get('result')) + return { 'name': self.node.properties.get('stepName'), "index": index, diff --git a/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py b/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py index c65dc44dc..46b21153f 100644 --- a/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py +++ b/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py @@ -9,6 +9,15 @@ from application.flow.i_step_node import NodeResult from application.flow.step_node.variable_aggregation_node.i_variable_aggregation_node import IVariableAggregation +def _filter_file_bytes(data): + """递归过滤掉所有层级的 file_bytes""" + if isinstance(data, dict): + return {k: _filter_file_bytes(v) for k, v in data.items() if k != 'file_bytes'} + elif isinstance(data, list): + return [_filter_file_bytes(item) for item in data] + else: + return data + class BaseVariableAggregationNode(IVariableAggregation): @@ -63,14 +72,16 @@ class BaseVariableAggregationNode(IVariableAggregation): {'result': result, 'strategy': strategy, 'group_list': self.reset_group_list(group_list), **result}, {}) def get_details(self, index: int, **kwargs): + result = _filter_file_bytes(self.context.get('result')) + group_list = _filter_file_bytes(self.context.get('group_list')) return { 'name': self.node.properties.get('stepName'), "index": index, 'run_time': self.context.get('run_time'), 'type': self.node.type, - 'result': self.context.get('result'), + 'result': result, 'strategy': self.context.get('strategy'), - 'group_list': self.context.get('group_list'), + 'group_list': group_list, 'status': self.status, 'err_message': self.err_message }