Skip to content

Commit e5a6580

Browse files
authored
fix: Process workflow tool common code (#4998)
1 parent ea21be1 commit e5a6580

File tree

3 files changed

+29
-50
lines changed

3 files changed

+29
-50
lines changed

apps/tools/serializers/tool_workflow.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,26 @@ def get_tool_list(self):
9898
class ToolWorkflowSerializer(serializers.Serializer):
9999
class Operate(serializers.Serializer):
100100
user_id = serializers.UUIDField(required=True, label=_('user id'))
101-
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
101+
workspace_id = serializers.CharField(required=False, label=_('workspace id'))
102102
tool_id = serializers.UUIDField(required=True, label=_('tool id'))
103103

104+
def is_valid(self, *, raise_exception=False):
105+
super().is_valid(raise_exception=True)
106+
workspace_id = self.data.get('workspace_id')
107+
query_set = QuerySet(Tool).filter(id=self.data.get('tool_id'))
108+
if workspace_id:
109+
query_set = query_set.filter(workspace_id=workspace_id)
110+
if not query_set.exists():
111+
raise AppApiException(500, _('Tool id does not exist'))
112+
104113
def debug(self, instance: Dict, user, with_valid=True):
105114
if with_valid:
106115
self.is_valid(raise_exception=True)
107116
tool_workflow = QuerySet(ToolWorkflow).filter(tool_id=self.data.get("tool_id")).first()
117+
workspace_id = tool_workflow.workspace_id
108118
tool_record_id = instance.get('chat_record_id') or str(uuid.uuid7())
109119
took_execute = ToolExecute(self.data.get("tool_id"), tool_record_id,
110-
self.data.get("workspace_id"),
120+
workspace_id,
111121
None,
112122
None,
113123
True)
@@ -118,7 +128,7 @@ def debug(self, instance: Dict, user, with_valid=True):
118128
'chat_record_id': tool_record_id,
119129
'tool_id': self.data.get("tool_id"),
120130
'stream': True,
121-
'workspace_id': self.data.get("workspace_id"),
131+
'workspace_id': workspace_id,
122132
**instance},
123133

124134
ToolWorkflowPostHandler(took_execute, self.data.get("tool_id")),
@@ -146,10 +156,10 @@ def publish(self, with_valid=True):
146156
if with_valid:
147157
self.is_valid()
148158
user_id = self.data.get('user_id')
149-
workspace_id = self.data.get("workspace_id")
159+
150160
user = QuerySet(User).filter(id=user_id).first()
151-
tool_workflow = QuerySet(ToolWorkflow).filter(tool_id=self.data.get("tool_id"),
152-
workspace_id=workspace_id).first()
161+
tool_workflow = QuerySet(ToolWorkflow).filter(tool_id=self.data.get("tool_id")).first()
162+
workspace_id = tool_workflow.workspace_id
153163
work_flow_version = ToolWorkflowVersion(work_flow=tool_workflow.work_flow,
154164
tool_id=self.data.get("tool_id"),
155165
name=timezone.localtime(timezone.now()).strftime(
@@ -165,19 +175,19 @@ def publish(self, with_valid=True):
165175

166176
def edit(self, instance: Dict):
167177
self.is_valid(raise_exception=True)
178+
tool = QuerySet(Tool).filter(id=self.data.get("tool_id")).first()
179+
workflow_id = tool.workspace_id
168180
if instance.get("work_flow"):
169181
QuerySet(ToolWorkflow).update_or_create(tool_id=self.data.get("tool_id"),
170182
create_defaults={'id': uuid.uuid7(),
171183
'tool_id': self.data.get(
172184
"tool_id"),
173-
"workspace_id": self.data.get(
174-
'workspace_id'),
185+
"workspace_id": workflow_id,
175186
'work_flow': instance.get('work_flow',
176187
{}), },
177188
defaults={
178189
'tool_id': self.data.get("tool_id"),
179-
'workspace_id': self.data.get(
180-
'workspace_id'),
190+
'workspace_id': workflow_id,
181191
'work_flow': instance.get('work_flow')
182192
})
183193
return self.one()
@@ -189,7 +199,7 @@ def edit(self, instance: Dict):
189199
tool = QuerySet(Tool).filter(id=self.data.get("tool_id")).first()
190200
ToolSerializer.Import(data={
191201
'user_id': self.data.get('user_id'),
192-
'workspace_id': self.data.get('workspace_id'),
202+
'workspace_id': workflow_id,
193203
'folder_id': tool.folder_id,
194204
'file': bytes_to_uploaded_file(res.content, 'file.tool')
195205
}).update_template_workflow(str(self.data.get('tool_id')))

apps/tools/views/tool_workflow.py

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77

88
from application.api.application_api import SpeechToTextAPI
99
from common.auth import TokenAuth
10-
from common.auth.authentication import has_permissions, get_is_permissions
10+
from common.auth.authentication import has_permissions
1111
from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
1212
from common.log.log import log
1313
from common.result import result, DefaultResultSerializer
1414
from knowledge.api.knowledge_workflow import KnowledgeWorkflowApi
15-
from knowledge.serializers.knowledge_workflow import KnowledgeWorkflowSerializer
1615
from tools.api.tool import GetInternalToolAPI
17-
from tools.api.tool_workflow import ToolWorkflowApi, ToolWorkflowExportApi, ToolWorkflowImportApi
16+
from tools.api.tool_workflow import ToolWorkflowApi
1817
from tools.serializers.tool_workflow import ToolWorkflowSerializer, ToolWorkflowMcpSerializer, StoreToolWorkflow
1918
from tools.views import get_tool_operation_object
2019

@@ -106,34 +105,6 @@ def get(self, request: Request, workspace_id: str, tool_id: str):
106105
).one())
107106

108107

109-
class KnowledgeWorkflowVersionView(APIView):
110-
authentication_classes = [TokenAuth]
111-
112-
@extend_schema(
113-
methods=['GET'],
114-
description=_('Get tool workflow version list'),
115-
summary=_('Get tool workflow version list'),
116-
operation_id=_('Get tool workflow version list'), # type: ignore
117-
parameters=ToolWorkflowApi.get_parameters(),
118-
responses=ToolWorkflowApi.get_response(),
119-
tags=[_('Tool')] # type: ignore
120-
)
121-
@has_permissions(
122-
PermissionConstants.TOOL_READ.get_workspace_tool_permission(),
123-
PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(),
124-
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
125-
ViewPermission(
126-
[RoleConstants.USER.get_workspace_role()],
127-
[PermissionConstants.TOOL.get_workspace_tool_permission()],
128-
CompareConstants.AND
129-
),
130-
)
131-
def get(self, request: Request, workspace_id: str, tool_id: str):
132-
return result.success(KnowledgeWorkflowSerializer.Operate(
133-
data={'user_id': request.user.id, 'workspace_id': workspace_id, 'tool_id': tool_id}
134-
).one())
135-
136-
137108
class ToolWorkflowDebugView(APIView):
138109
authentication_classes = [TokenAuth]
139110

ui/src/views/tool-workflow/index.vue

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@
3838
<AppIcon iconName="app-add-outlined" class="mr-4" />
3939
{{ $t('workflow.setting.addComponent') }}
4040
</el-button>
41-
<el-button @click="clickShowDebug" :disabled="showDebug" v-if="permissionPrecise.debug(id)">
41+
<el-button @click="clickShowDebug" :disabled="showDebug" v-if="permissionPrecise.read()">
4242
<AppIcon iconName="app-debug-outlined" class="mr-4"></AppIcon>
4343
{{ $t('common.debug') }}
4444
</el-button>
45-
<el-button v-if="permissionPrecise.workflow_edit(id)" @click="saveTool(true)">
45+
<el-button v-if="permissionPrecise.edit(id)" @click="saveTool(true)">
4646
<AppIcon iconName="app-save-outlined" class="mr-4"></AppIcon>
4747
{{ $t('common.save') }}
4848
</el-button>
49-
<el-button type="primary" v-if="permissionPrecise.workflow_edit(id)" @click="publish">
49+
<el-button type="primary" v-if="permissionPrecise.edit(id)" @click="publish">
5050
{{ $t('common.publish') }}
5151
</el-button>
5252

@@ -58,7 +58,7 @@
5858
<el-dropdown-menu>
5959
<el-dropdown-item
6060
@click.stop="exportToolWorkflow(detail.name, detail.id)"
61-
v-if="permissionPrecise.workflow_export(id)"
61+
v-if="permissionPrecise.export(id)"
6262
>
6363
<AppIcon iconName="app-export" class="color-secondary"></AppIcon>
6464
{{ $t('workflow.operation.exportWorkflow') }}
@@ -68,7 +68,7 @@
6868
<AppIcon iconName="app-history-outlined" class="color-secondary"></AppIcon>
6969
{{ $t('workflow.setting.releaseHistory') }}
7070
</el-dropdown-item>
71-
<el-dropdown-item v-if="permissionPrecise.workflow_edit(id)">
71+
<el-dropdown-item v-if="permissionPrecise.edit(id)">
7272
<AppIcon iconName="app-save-outlined" class="color-secondary"></AppIcon>
7373
{{ $t('workflow.setting.autoSave') }}
7474
<div class="ml-4">
@@ -193,15 +193,13 @@ const apiType = computed(() => {
193193
return 'systemShare'
194194
} else if (route.path.includes('resource-management')) {
195195
return 'systemManage'
196-
} else if (route.path.includes('share/')) {
197-
return 'workspaceShare'
198196
} else {
199197
return 'workspace'
200198
}
201199
})
202200
203201
const permissionPrecise = computed(() => {
204-
return permissionMap['knowledge'][apiType.value]
202+
return permissionMap['tool'][apiType.value]
205203
})
206204
207205
const isDefaultTheme = computed(() => {

0 commit comments

Comments
 (0)