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

View File

@ -236,7 +236,12 @@ class ToolView(APIView):
@log(menu='Tool', operate='Import tool', )
def post(self, request: Request, workspace_id: str):
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))
class Export(APIView):

View File

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