fix: There is a tool node in the application - the tool node has startup parameters - after importing, the tool should be disabled (#3821)

This commit is contained in:
shaohuzhang1 2025-08-05 17:30:36 +08:00 committed by GitHub
parent 5426e90234
commit 44645734f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 4 deletions

View File

@ -45,7 +45,7 @@ from models_provider.tools import get_model_instance_by_model_workspace_id
from system_manage.models import WorkspaceUserResourcePermission, AuthTargetType from system_manage.models import WorkspaceUserResourcePermission, AuthTargetType
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
from tools.models import Tool, ToolScope from tools.models import Tool, ToolScope
from tools.serializers.tool import ToolModelSerializer from tools.serializers.tool import ToolExportModelSerializer
from users.models import User from users.models import User
from users.serializers.user import is_workspace_manage from users.serializers.user import is_workspace_manage
@ -554,6 +554,7 @@ class ApplicationSerializer(serializers.Serializer):
@param tool: 工具 @param tool: 工具
@return: @return:
""" """
return Tool(id=tool.get('id'), return Tool(id=tool.get('id'),
user_id=user_id, user_id=user_id,
name=tool.get('name'), name=tool.get('name'),
@ -561,7 +562,7 @@ class ApplicationSerializer(serializers.Serializer):
template_id=tool.get('template_id'), template_id=tool.get('template_id'),
input_field_list=tool.get('input_field_list'), input_field_list=tool.get('input_field_list'),
init_field_list=tool.get('init_field_list'), init_field_list=tool.get('init_field_list'),
is_active=tool.get('is_active'), is_active=tool.get('is_active') if len((tool.get('init_field_list') or [])) > 0 else False,
scope=ToolScope.WORKSPACE, scope=ToolScope.WORKSPACE,
folder_id=workspace_id, folder_id=workspace_id,
workspace_id=workspace_id) workspace_id=workspace_id)
@ -682,7 +683,7 @@ class ApplicationOperateSerializer(serializers.Serializer):
mk_instance = MKInstance(application_dict, mk_instance = MKInstance(application_dict,
[], [],
'v2', 'v2',
[ToolModelSerializer(tool).data for tool in [ToolExportModelSerializer(tool).data for tool in
tool_list]) tool_list])
application_pickle = pickle.dumps(mk_instance) application_pickle = pickle.dumps(mk_instance)
response = HttpResponse(content_type='text/plain', content=application_pickle) response = HttpResponse(content_type='text/plain', content=application_pickle)

View File

@ -110,6 +110,14 @@ class ToolModelSerializer(serializers.ModelSerializer):
'create_time', 'update_time'] 'create_time', 'update_time']
class ToolExportModelSerializer(serializers.ModelSerializer):
class Meta:
model = Tool
fields = ['id', 'name', 'icon', 'desc', 'code', 'input_field_list', 'init_field_list',
'scope', 'is_active', 'user_id', 'template_id', 'workspace_id', 'folder_id', 'tool_type', 'label',
'create_time', 'update_time']
class UploadedFileField(serializers.FileField): class UploadedFileField(serializers.FileField):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
@ -376,7 +384,7 @@ class ToolSerializer(serializers.Serializer):
self.is_valid() self.is_valid()
id = self.data.get('id') id = self.data.get('id')
tool = QuerySet(Tool).filter(id=id).first() tool = QuerySet(Tool).filter(id=id).first()
tool_dict = ToolModelSerializer(tool).data tool_dict = ToolExportModelSerializer(tool).data
mk_instance = ToolInstance(tool_dict, 'v2') mk_instance = ToolInstance(tool_dict, 'v2')
tool_pickle = pickle.dumps(mk_instance) tool_pickle = pickle.dumps(mk_instance)
response = HttpResponse(content_type='text/plain', content=tool_pickle) response = HttpResponse(content_type='text/plain', content=tool_pickle)