55import os
66import pickle
77import re
8- import requests
98import tempfile
109import zipfile
1110from typing import Dict
1211
12+ import requests
1313import uuid_utils .compat as uuid
1414from django .core import validators
1515from django .db import transaction
@@ -356,9 +356,6 @@ def insert(self, instance, with_valid=True):
356356 ToolCreateRequest (data = instance ).is_valid (raise_exception = True )
357357 # 校验代码是否包括禁止的关键字
358358 ToolExecutor ().validate_banned_keywords (instance .get ('code' , '' ))
359- # 校验mcp json
360- if instance .get ('tool_type' ) == ToolType .MCP .value :
361- validate_mcp_config (json .loads (instance .get ('code' )))
362359
363360 tool_id = uuid .uuid7 ()
364361 Tool (
@@ -386,6 +383,18 @@ def insert(self, instance, with_valid=True):
386383 'id' : tool_id , 'workspace_id' : self .data .get ('workspace_id' )
387384 }).one ()
388385
386+ class TestConnection (serializers .Serializer ):
387+ workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
388+ code = serializers .CharField (required = True , label = _ ('tool content' ))
389+
390+ def test_connection (self ):
391+ self .is_valid (raise_exception = True )
392+ # 校验代码是否包括禁止的关键字
393+ ToolExecutor ().validate_banned_keywords (self .data .get ('code' , '' ))
394+ # 校验mcp json
395+ validate_mcp_config (json .loads (self .data .get ('code' )))
396+ return True
397+
389398 class Debug (serializers .Serializer ):
390399 user_id = serializers .UUIDField (required = True , label = _ ('user id' ))
391400 workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
@@ -475,9 +484,7 @@ def edit(self, instance, with_valid=True):
475484 ToolEditRequest (data = instance ).is_valid (raise_exception = True )
476485 # 校验代码是否包括禁止的关键字
477486 ToolExecutor ().validate_banned_keywords (instance .get ('code' , '' ))
478- # 校验mcp json
479- if instance .get ('tool_type' ) == ToolType .MCP .value :
480- validate_mcp_config (json .loads (instance .get ('code' )))
487+
481488
482489 if not QuerySet (Tool ).filter (id = self .data .get ('id' )).exists ():
483490 raise serializers .ValidationError (_ ('Tool not found' ))
@@ -755,7 +762,8 @@ def get_appstore_tools(self):
755762 versions = tool .get ('versions' , [])
756763 tool ['label' ] = tag_dict [tool .get ('tags' )[0 ]] if tool .get ('tags' ) else ''
757764 tool ['version' ] = next (
758- (version .get ('name' ) for version in versions if version .get ('downloadUrl' ) == tool ['downloadUrl' ]),
765+ (version .get ('name' ) for version in versions if
766+ version .get ('downloadUrl' ) == tool ['downloadUrl' ]),
759767 )
760768 filter_apps .append (tool )
761769
@@ -836,7 +844,8 @@ def update_tool(self, with_valid=True):
836844 raise AppApiException (500 , _ ('Tool does not exist' ))
837845 # 查找匹配的版本名称
838846 version_name = next (
839- (version .get ('name' ) for version in self .data .get ('versions' ) if version .get ('downloadUrl' ) == self .data .get ('download_url' )),
847+ (version .get ('name' ) for version in self .data .get ('versions' ) if
848+ version .get ('downloadUrl' ) == self .data .get ('download_url' )),
840849 )
841850 res = requests .get (self .data .get ('download_url' ), timeout = 5 )
842851 tool_data = RestrictedUnpickler (io .BytesIO (res .content )).load ().tool
@@ -855,7 +864,6 @@ def update_tool(self, with_valid=True):
855864 return ToolModelSerializer (tool ).data
856865
857866
858-
859867class ToolTreeSerializer (serializers .Serializer ):
860868 class Query (serializers .Serializer ):
861869 workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
0 commit comments