feat: add optional folder_id to tool import functionality

This commit is contained in:
CaptainB 2025-07-14 16:06:11 +08:00
parent 117f882521
commit 48959a1e77
3 changed files with 13 additions and 2 deletions

View File

@ -401,6 +401,7 @@ class ToolSerializer(serializers.Serializer):
file = UploadedFileField(required=True, label=_("file")) file = UploadedFileField(required=True, label=_("file"))
user_id = serializers.UUIDField(required=True, label=_("User ID")) user_id = serializers.UUIDField(required=True, label=_("User ID"))
workspace_id = serializers.CharField(required=True, label=_("workspace id")) workspace_id = serializers.CharField(required=True, label=_("workspace id"))
folder_id = serializers.CharField(required=False, allow_null=True, label=_("folder id"))
# #
@transaction.atomic @transaction.atomic
@ -413,6 +414,10 @@ class ToolSerializer(serializers.Serializer):
tool_instance = RestrictedUnpickler(io.BytesIO(tool_instance_bytes)).load() tool_instance = RestrictedUnpickler(io.BytesIO(tool_instance_bytes)).load()
except Exception as e: except Exception as e:
raise AppApiException(1001, _("Unsupported file format")) raise AppApiException(1001, _("Unsupported file format"))
if self.data.get('folder_id') is None:
folder_id = self.data.get('workspace_id')
else:
folder_id = self.data.get('folder_id')
tool = tool_instance.tool tool = tool_instance.tool
tool_id = uuid.uuid7() tool_id = uuid.uuid7()
tool_model = Tool( tool_model = Tool(
@ -424,7 +429,7 @@ class ToolSerializer(serializers.Serializer):
workspace_id=self.data.get('workspace_id'), workspace_id=self.data.get('workspace_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', []),
folder_id=self.data.get('workspace_id'), folder_id=folder_id,
scope=scope, scope=scope,
is_active=False is_active=False
) )

View File

@ -236,7 +236,12 @@ class ToolView(APIView):
@log(menu='Tool', operate='Import tool', ) @log(menu='Tool', operate='Import tool', )
def post(self, request: Request, workspace_id: str): def post(self, request: Request, workspace_id: str):
return result.success(ToolSerializer.Import( return result.success(ToolSerializer.Import(
data={'workspace_id': workspace_id, 'file': request.FILES.get('file'), 'user_id': request.user.id} data={
'workspace_id': workspace_id,
'file': request.FILES.get('file'),
'user_id': request.user.id,
'folder_id': request.data.get('folder_id')
}
).import_(ToolScope.WORKSPACE)) ).import_(ToolScope.WORKSPACE))
class Export(APIView): class Export(APIView):

View File

@ -554,6 +554,7 @@ const elUploadRef = ref()
function importTool(file: any) { function importTool(file: any) {
const formData = new FormData() const formData = new FormData()
formData.append('file', file.raw, file.name) formData.append('file', file.raw, file.name)
formData.append('folder_id', folder.currentFolder.id || user.getWorkspaceId())
elUploadRef.value.clearFiles() elUploadRef.value.clearFiles()
loadSharedApi({ type: 'tool', systemType: apiType.value }) loadSharedApi({ type: 'tool', systemType: apiType.value })
.postImportTool(formData, loading) .postImportTool(formData, loading)