|
1 | 1 | # coding=utf-8 |
2 | | - |
| 2 | +import json |
3 | 3 | from typing import Dict |
4 | 4 |
|
5 | 5 | import uuid_utils.compat as uuid |
|
13 | 13 | from application.flow.knowledge_workflow_manage import KnowledgeWorkflowManage |
14 | 14 | from application.flow.step_node import get_node |
15 | 15 | from common.exception.app_exception import AppApiException |
| 16 | +from common.utils.rsa_util import rsa_long_decrypt |
| 17 | +from common.utils.tool_code import ToolExecutor |
16 | 18 | from knowledge.models import KnowledgeScope, Knowledge, KnowledgeType, KnowledgeWorkflow |
17 | 19 | from knowledge.models.knowledge_action import KnowledgeAction, State |
18 | 20 | from knowledge.serializers.knowledge import KnowledgeModelSerializer |
| 21 | +from maxkb.const import CONFIG |
19 | 22 | from system_manage.models import AuthTargetType |
20 | 23 | from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer |
21 | 24 | from tools.models import Tool |
22 | 25 |
|
| 26 | +tool_executor = ToolExecutor(CONFIG.get('SANDBOX')) |
| 27 | + |
23 | 28 |
|
24 | 29 | class KnowledgeWorkflowModelSerializer(serializers.ModelSerializer): |
25 | 30 | class Meta: |
@@ -62,20 +67,22 @@ def one(self, is_valid=True): |
62 | 67 |
|
63 | 68 |
|
64 | 69 | class KnowledgeWorkflowSerializer(serializers.Serializer): |
65 | | - class Form(serializers.Serializer): |
| 70 | + class Datasource(serializers.Serializer): |
66 | 71 | type = serializers.CharField(required=True, label=_('type')) |
67 | 72 | id = serializers.CharField(required=True, label=_('type')) |
68 | | - node = serializers.DictField(required=True, label="") |
| 73 | + params = serializers.DictField(required=True, label="") |
| 74 | + function_name = serializers.CharField(required=True, label=_('function_name')) |
69 | 75 |
|
70 | | - def get_form_list(self): |
| 76 | + def action(self): |
71 | 77 | self.is_valid(raise_exception=True) |
72 | 78 | if self.data.get('type') == 'local': |
73 | 79 | node = get_node(self.data.get('id'), WorkflowMode.KNOWLEDGE) |
74 | | - return node.get_form_list(self.data.get("node")) |
| 80 | + return node.__getattribute__(node, self.data.get("function_name"))(**self.data.get("params")) |
75 | 81 | elif self.data.get('type') == 'tool': |
76 | 82 | tool = QuerySet(Tool).filter(id=self.data.get("id")).first() |
77 | | - # todo 调用工具数据源的函数获取表单列表 |
78 | | - return None |
| 83 | + init_params = json.loads(rsa_long_decrypt(tool.init_params)) |
| 84 | + return tool_executor.exec_code(tool.code, {**init_params, **self.data.get('params')}, |
| 85 | + self.data.get('function_name')) |
79 | 86 |
|
80 | 87 | class Create(serializers.Serializer): |
81 | 88 | user_id = serializers.UUIDField(required=True, label=_('user id')) |
|
0 commit comments