refactor: enhance ToolTreeSerializer query parameters
This commit is contained in:
parent
6411f32a3d
commit
f0903ac309
@ -16,7 +16,7 @@ from pylint.reporters import JSON2Reporter
|
|||||||
from rest_framework import serializers, status
|
from rest_framework import serializers, status
|
||||||
|
|
||||||
from common.database_model_manage.database_model_manage import DatabaseModelManage
|
from common.database_model_manage.database_model_manage import DatabaseModelManage
|
||||||
from common.db.search import page_search, native_page_search
|
from common.db.search import page_search, native_page_search, native_search
|
||||||
from common.exception.app_exception import AppApiException
|
from common.exception.app_exception import AppApiException
|
||||||
from common.field.common import UploadedImageField
|
from common.field.common import UploadedImageField
|
||||||
from common.result import result
|
from common.result import result
|
||||||
@ -28,7 +28,6 @@ from maxkb.const import CONFIG, PROJECT_DIR
|
|||||||
from system_manage.models import AuthTargetType, WorkspaceUserResourcePermission
|
from system_manage.models import AuthTargetType, WorkspaceUserResourcePermission
|
||||||
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
||||||
from tools.models import Tool, ToolScope, ToolFolder, ToolType
|
from tools.models import Tool, ToolScope, ToolFolder, ToolType
|
||||||
from tools.serializers.tool_folder import ToolFolderFlatSerializer
|
|
||||||
from users.serializers.user import is_workspace_manage
|
from users.serializers.user import is_workspace_manage
|
||||||
|
|
||||||
tool_executor = ToolExecutor(CONFIG.get('SANDBOX'))
|
tool_executor = ToolExecutor(CONFIG.get('SANDBOX'))
|
||||||
@ -537,36 +536,6 @@ class ToolSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
|
|
||||||
class ToolTreeSerializer(serializers.Serializer):
|
class ToolTreeSerializer(serializers.Serializer):
|
||||||
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
|
|
||||||
scope = serializers.CharField(required=True, label=_('scope'))
|
|
||||||
|
|
||||||
def get_tools(self, folder_id):
|
|
||||||
self.is_valid(raise_exception=True)
|
|
||||||
if not folder_id:
|
|
||||||
folder_id = self.data.get('workspace_id')
|
|
||||||
# 获取当前文件夹
|
|
||||||
current_folder = ToolFolder.objects.filter(id=folder_id).first()
|
|
||||||
if not current_folder:
|
|
||||||
raise serializers.ValidationError(_('Folder not found'))
|
|
||||||
|
|
||||||
# 获取当前文件夹下的直接子文件夹
|
|
||||||
child_folders = ToolFolder.objects.filter(parent=current_folder)
|
|
||||||
folders_data = ToolFolderFlatSerializer(child_folders, many=True).data
|
|
||||||
|
|
||||||
# 获取当前文件夹下的工具
|
|
||||||
tools = QuerySet(Tool).filter(
|
|
||||||
Q(workspace_id=self.data.get('workspace_id')) &
|
|
||||||
Q(scope=self.data.get('scope')) &
|
|
||||||
Q(folder_id=folder_id)
|
|
||||||
)
|
|
||||||
tools_data = ToolModelSerializer(tools, many=True).data
|
|
||||||
|
|
||||||
# 返回包含文件夹和工具的结构
|
|
||||||
return {
|
|
||||||
'folders': folders_data,
|
|
||||||
'tools': tools_data,
|
|
||||||
}
|
|
||||||
|
|
||||||
class Query(serializers.Serializer):
|
class Query(serializers.Serializer):
|
||||||
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
|
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
|
||||||
folder_id = serializers.CharField(required=True, label=_('folder id'))
|
folder_id = serializers.CharField(required=True, label=_('folder id'))
|
||||||
@ -677,3 +646,36 @@ class ToolTreeSerializer(serializers.Serializer):
|
|||||||
'init_field_list': json.loads(record.get('init_field_list', '[]')),
|
'init_field_list': json.loads(record.get('init_field_list', '[]')),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_tools(self):
|
||||||
|
self.is_valid(raise_exception=True)
|
||||||
|
|
||||||
|
workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id'))
|
||||||
|
is_x_pack_ee = self.is_x_pack_ee()
|
||||||
|
results = native_search(
|
||||||
|
self.get_query_set(workspace_manage, is_x_pack_ee),
|
||||||
|
get_file_content(
|
||||||
|
os.path.join(
|
||||||
|
PROJECT_DIR,
|
||||||
|
"apps", "tools", 'sql',
|
||||||
|
'list_tool.sql' if workspace_manage else (
|
||||||
|
'list_tool_user_ee.sql' if is_x_pack_ee else 'list_tool_user.sql'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
# 返回包含文件夹和工具的结构
|
||||||
|
return {
|
||||||
|
'folders': [
|
||||||
|
folder for folder in results if folder['resource_type'] == 'folder'
|
||||||
|
],
|
||||||
|
'tools': [
|
||||||
|
{
|
||||||
|
**tool,
|
||||||
|
'input_field_list': json.loads(tool.get('input_field_list', '[]')),
|
||||||
|
'init_field_list': json.loads(tool.get('init_field_list', '[]')),
|
||||||
|
} for tool in results if tool['resource_type'] == 'tool'
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|||||||
@ -67,9 +67,16 @@ class ToolView(APIView):
|
|||||||
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), RoleConstants.USER.get_workspace_role()
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), RoleConstants.USER.get_workspace_role()
|
||||||
)
|
)
|
||||||
def get(self, request: Request, workspace_id: str):
|
def get(self, request: Request, workspace_id: str):
|
||||||
return result.success(ToolTreeSerializer(
|
return result.success(ToolTreeSerializer.Query(
|
||||||
data={'workspace_id': workspace_id, 'scope': ToolScope.WORKSPACE, 'user_id': request.user.id}
|
data={
|
||||||
).get_tools(request.query_params.get('folder_id')))
|
'workspace_id': workspace_id,
|
||||||
|
'folder_id': request.query_params.get('folder_id'),
|
||||||
|
'name': request.query_params.get('name'),
|
||||||
|
'scope': request.query_params.get('scope', ToolScope.WORKSPACE),
|
||||||
|
'user_id': request.user.id,
|
||||||
|
'create_user': request.query_params.get('create_user'),
|
||||||
|
}
|
||||||
|
).get_tools())
|
||||||
|
|
||||||
class Debug(APIView):
|
class Debug(APIView):
|
||||||
authentication_classes = [TokenAuth]
|
authentication_classes = [TokenAuth]
|
||||||
@ -111,8 +118,8 @@ class ToolView(APIView):
|
|||||||
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
|
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
|
||||||
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
||||||
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
||||||
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
||||||
CompareConstants.AND),
|
CompareConstants.AND),
|
||||||
)
|
)
|
||||||
@log(
|
@log(
|
||||||
menu='Tool', operate='Update tool',
|
menu='Tool', operate='Update tool',
|
||||||
@ -136,9 +143,10 @@ class ToolView(APIView):
|
|||||||
@has_permissions(
|
@has_permissions(
|
||||||
PermissionConstants.TOOL_READ.get_workspace_tool_permission(),
|
PermissionConstants.TOOL_READ.get_workspace_tool_permission(),
|
||||||
PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(),
|
PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(),
|
||||||
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
||||||
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
||||||
CompareConstants.AND),
|
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
||||||
|
CompareConstants.AND),
|
||||||
)
|
)
|
||||||
@log(menu='Tool', operate='Get tool')
|
@log(menu='Tool', operate='Get tool')
|
||||||
def get(self, request: Request, workspace_id: str, tool_id: str):
|
def get(self, request: Request, workspace_id: str, tool_id: str):
|
||||||
@ -158,9 +166,10 @@ class ToolView(APIView):
|
|||||||
@has_permissions(
|
@has_permissions(
|
||||||
PermissionConstants.TOOL_DELETE.get_workspace_tool_permission(),
|
PermissionConstants.TOOL_DELETE.get_workspace_tool_permission(),
|
||||||
PermissionConstants.TOOL_DELETE.get_workspace_permission_workspace_manage_role(),
|
PermissionConstants.TOOL_DELETE.get_workspace_permission_workspace_manage_role(),
|
||||||
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
||||||
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
||||||
CompareConstants.AND),
|
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
||||||
|
CompareConstants.AND),
|
||||||
)
|
)
|
||||||
@log(
|
@log(
|
||||||
menu='Tool', operate="Delete tool",
|
menu='Tool', operate="Delete tool",
|
||||||
@ -242,9 +251,10 @@ class ToolView(APIView):
|
|||||||
@has_permissions(
|
@has_permissions(
|
||||||
PermissionConstants.TOOL_EXPORT.get_workspace_tool_permission(),
|
PermissionConstants.TOOL_EXPORT.get_workspace_tool_permission(),
|
||||||
PermissionConstants.TOOL_EXPORT.get_workspace_permission_workspace_manage_role(),
|
PermissionConstants.TOOL_EXPORT.get_workspace_permission_workspace_manage_role(),
|
||||||
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
||||||
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
||||||
CompareConstants.AND),
|
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
||||||
|
CompareConstants.AND),
|
||||||
)
|
)
|
||||||
@log(
|
@log(
|
||||||
menu='Tool', operate="Export tool",
|
menu='Tool', operate="Export tool",
|
||||||
@ -296,9 +306,10 @@ class ToolView(APIView):
|
|||||||
@has_permissions(
|
@has_permissions(
|
||||||
PermissionConstants.TOOL_EDIT.get_workspace_tool_permission(),
|
PermissionConstants.TOOL_EDIT.get_workspace_tool_permission(),
|
||||||
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
|
PermissionConstants.TOOL_EDIT.get_workspace_permission_workspace_manage_role(),
|
||||||
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission([RoleConstants.USER.get_workspace_role()],
|
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),
|
||||||
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
ViewPermission([RoleConstants.USER.get_workspace_role()],
|
||||||
CompareConstants.AND),
|
[PermissionConstants.TOOL.get_workspace_tool_permission()],
|
||||||
|
CompareConstants.AND),
|
||||||
)
|
)
|
||||||
def put(self, request: Request, tool_id: str, workspace_id: str):
|
def put(self, request: Request, tool_id: str, workspace_id: str):
|
||||||
return result.success(ToolSerializer.IconOperate(data={
|
return result.success(ToolSerializer.IconOperate(data={
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user