mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-28 14:52:58 +00:00
feat: add ToolTreeView and ToolTreeReadAPI for retrieving tools by workspace and module
This commit is contained in:
parent
6f6b163416
commit
fe032822f4
|
|
@ -68,3 +68,24 @@ class ToolEditAPI(ToolReadAPI):
|
|||
|
||||
class ToolDeleteAPI(ToolReadAPI):
|
||||
pass
|
||||
|
||||
|
||||
class ToolTreeReadAPI(APIMixin):
|
||||
@staticmethod
|
||||
def get_parameters():
|
||||
return [
|
||||
OpenApiParameter(
|
||||
name="workspace_id",
|
||||
description="工作空间id",
|
||||
type=OpenApiTypes.STR,
|
||||
location='path',
|
||||
required=True,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name="module_id",
|
||||
description="模块id",
|
||||
type=OpenApiTypes.STR,
|
||||
location='query',
|
||||
required=True,
|
||||
)
|
||||
]
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from django.db.models import QuerySet
|
|||
from django.utils.translation import gettext_lazy as _
|
||||
from rest_framework import serializers
|
||||
|
||||
from tools.models import Tool, ToolScope
|
||||
from tools.models import Tool, ToolScope, ToolModule
|
||||
|
||||
|
||||
class ToolModelSerializer(serializers.ModelSerializer):
|
||||
|
|
@ -63,7 +63,7 @@ class ToolCreateRequest(serializers.Serializer):
|
|||
class ToolSerializer(serializers.Serializer):
|
||||
class Create(serializers.Serializer):
|
||||
user_id = serializers.UUIDField(required=True, label=_('user id'))
|
||||
workspace_id = serializers.UUIDField(required=True, label=_('workspace id'))
|
||||
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
|
||||
|
||||
def insert(self, instance, with_valid=True):
|
||||
if with_valid:
|
||||
|
|
@ -77,6 +77,7 @@ class ToolSerializer(serializers.Serializer):
|
|||
input_field_list=instance.get('input_field_list', []),
|
||||
init_field_list=instance.get('init_field_list', []),
|
||||
scope=ToolScope.WORKSPACE,
|
||||
module_id=instance.get('module_id', 'root'),
|
||||
is_active=False)
|
||||
tool.save()
|
||||
return ToolModelSerializer(tool).data
|
||||
|
|
@ -109,3 +110,20 @@ class ToolSerializer(serializers.Serializer):
|
|||
self.is_valid(raise_exception=True)
|
||||
tool = QuerySet(Tool).filter(id=self.data.get('id')).first()
|
||||
return ToolModelSerializer(tool).data
|
||||
|
||||
|
||||
class ToolTreeSerializer(serializers.Serializer):
|
||||
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
|
||||
|
||||
def get_tools(self, module_id):
|
||||
self.is_valid(raise_exception=True)
|
||||
if not module_id:
|
||||
module_id = 'root'
|
||||
root = ToolModule.objects.filter(id=module_id).first()
|
||||
if not root:
|
||||
raise serializers.ValidationError(_('Module not found'))
|
||||
# 使用MPTT的get_family()方法获取所有相关节点
|
||||
all_modules = root.get_descendants(include_self=True)
|
||||
|
||||
tools = QuerySet(Tool).filter(workspace_id=self.data.get('workspace_id'), module_id__in=all_modules)
|
||||
return ToolModelSerializer(tools, many=True).data
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@ from . import views
|
|||
app_name = "tool"
|
||||
urlpatterns = [
|
||||
path('workspace/<str:workspace_id>/tool', views.ToolView.Create.as_view()),
|
||||
path('workspace/<str:workspace_id>/tool/tree', views.ToolTreeView.as_view()),
|
||||
path('workspace/<str:workspace_id>/tool/<str:tool_id>', views.ToolView.Operate.as_view()),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ from common.auth import TokenAuth
|
|||
from common.auth.authentication import has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants
|
||||
from common.result import result
|
||||
from tools.api.tool import ToolCreateAPI, ToolEditAPI, ToolReadAPI, ToolDeleteAPI
|
||||
from tools.serializers.tool import ToolSerializer
|
||||
from tools.api.tool import ToolCreateAPI, ToolEditAPI, ToolReadAPI, ToolDeleteAPI, ToolTreeReadAPI
|
||||
from tools.serializers.tool import ToolSerializer, ToolTreeSerializer
|
||||
|
||||
|
||||
class ToolView(APIView):
|
||||
|
|
@ -45,8 +45,8 @@ class ToolView(APIView):
|
|||
).edit(request.data))
|
||||
|
||||
@extend_schema(methods=['GET'],
|
||||
description=_('Update tool'),
|
||||
operation_id=_('Update tool'),
|
||||
description=_('Get tool'),
|
||||
operation_id=_('Get tool'),
|
||||
parameters=ToolReadAPI.get_parameters(),
|
||||
responses=ToolReadAPI.get_response(),
|
||||
tags=[_('Tool')])
|
||||
|
|
@ -66,3 +66,19 @@ class ToolView(APIView):
|
|||
return result.success(ToolSerializer.Operate(
|
||||
data={'id': tool_id, 'workspace_id': workspace_id}
|
||||
).delete())
|
||||
|
||||
|
||||
class ToolTreeView(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
||||
@extend_schema(methods=['GET'],
|
||||
description=_('Get tool'),
|
||||
operation_id=_('Get tool'),
|
||||
parameters=ToolTreeReadAPI.get_parameters(),
|
||||
responses=ToolTreeReadAPI.get_response(),
|
||||
tags=[_('Tool')])
|
||||
@has_permissions(PermissionConstants.TOOL_READ.get_workspace_permission())
|
||||
def get(self, request: Request, workspace_id: str):
|
||||
return result.success(ToolTreeSerializer(
|
||||
data={'workspace_id': workspace_id}
|
||||
).get_tools(request.query_params.get('module_id')))
|
||||
|
|
|
|||
Loading…
Reference in New Issue