| 902 | os.remove(file_name) |
| 903 | |
| 904 | class Import(serializers.Serializer): |
| 905 | file = UploadedFileField(required=True, label=_("file")) |
| 906 | user_id = serializers.UUIDField(required=True, label=_("User ID")) |
| 907 | workspace_id = serializers.CharField(required=True, label=_("workspace id")) |
| 908 | folder_id = serializers.CharField(required=False, allow_null=True, label=_("folder id")) |
| 909 | |
| 910 | @staticmethod |
| 911 | def to_tool_workflow(work_flow, update_tool_map): |
| 912 | for node in work_flow.get("nodes", []): |
| 913 | hand_node(node, update_tool_map) |
| 914 | if node.get("type") == "loop-node": |
| 915 | for n in node.get("properties", {}).get("node_data", {}).get("loop_body", {}).get("nodes", []): |
| 916 | hand_node(n, update_tool_map) |
| 917 | return work_flow |
| 918 | |
| 919 | @staticmethod |
| 920 | def to_tool(tool, workspace_id, user_id, folder_id): |
| 921 | # 如果是技能类型的工具,需要将code保存为文件 |
| 922 | code = tool.get("code") |
| 923 | if tool.get("tool_type") == ToolType.SKILL: |
| 924 | skill_file_id = uuid.uuid7() |
| 925 | skill_file = File( |
| 926 | id=skill_file_id, |
| 927 | file_name=f"{tool.get('name')}.zip", |
| 928 | source_type=FileSourceType.TOOL, |
| 929 | source_id=tool.get("id"), |
| 930 | meta={}, |
| 931 | ) |
| 932 | skill_file.save(base64.b64decode(code)) |
| 933 | tool["code"] = skill_file_id |
| 934 | return Tool( |
| 935 | id=tool.get("id"), |
| 936 | user_id=user_id, |
| 937 | name=tool.get("name"), |
| 938 | code=tool.get("code"), |
| 939 | template_id=tool.get("template_id"), |
| 940 | input_field_list=tool.get("input_field_list"), |
| 941 | init_field_list=tool.get("init_field_list"), |
| 942 | is_active=False |
| 943 | if (len((tool.get("init_field_list") or [])) > 0 or tool.get("tool_type") == ToolType.WORKFLOW) |
| 944 | else tool.get("is_active"), |
| 945 | tool_type=tool.get("tool_type", "CUSTOM") or "CUSTOM", |
| 946 | scope=ToolScope.SHARED if workspace_id == "None" else ToolScope.WORKSPACE, |
| 947 | folder_id=folder_id if folder_id else "default" if workspace_id == "None" else workspace_id, |
| 948 | workspace_id=workspace_id, |
| 949 | ) |
| 950 | |
| 951 | def import_workflow_tools(self, tool, workspace_id, user_id, folder_id, new_child_policy): |
| 952 | """ |
| 953 | |
| 954 | @param tool: 工具对象 |
| 955 | @param workspace_id: 工作空间id |
| 956 | @param user_id: 用户id |
| 957 | @param folder_id: 文件夹id |
| 958 | @param new_child_policy: 子工具创建策略 |
| 959 | 0: 不创建 |
| 960 | 1: 对比创建: 如果存在就不创建 不存在则创建 |
| 961 | 2: 全部创建 |
nothing calls this directly
no test coverage detected