mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
feat: Audit log add operation object (#2681)
This commit is contained in:
parent
ba4e55d3e8
commit
f9d536f5a2
|
|
@ -13,6 +13,7 @@ from rest_framework.views import APIView
|
|||
|
||||
from application.serializers.application_version_serializers import ApplicationVersionSerializer
|
||||
from application.swagger_api.application_version_api import ApplicationVersionApi
|
||||
from application.views import get_application_operation_object
|
||||
from common.auth import has_permissions, TokenAuth
|
||||
from common.constants.permission_constants import PermissionConstants, CompareConstants, ViewPermission, RoleConstants, \
|
||||
Permission, Group, Operate
|
||||
|
|
@ -31,7 +32,6 @@ class ApplicationVersionView(APIView):
|
|||
responses=result.get_api_array_response(ApplicationVersionApi.get_response_body_api()),
|
||||
tags=[_('Application/Version')])
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Get the application list")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationVersionSerializer.Query(
|
||||
|
|
@ -49,7 +49,6 @@ class ApplicationVersionView(APIView):
|
|||
responses=result.get_page_api_response(ApplicationVersionApi.get_response_body_api()),
|
||||
tags=[_('Application/Version')])
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Get the list of application versions by page")
|
||||
def get(self, request: Request, application_id: str, current_page: int, page_size: int):
|
||||
return result.success(
|
||||
ApplicationVersionSerializer.Query(
|
||||
|
|
@ -67,7 +66,6 @@ class ApplicationVersionView(APIView):
|
|||
responses=result.get_api_response(ApplicationVersionApi.get_response_body_api()),
|
||||
tags=[_('Application/Version')])
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Get application version details")
|
||||
def get(self, request: Request, application_id: str, work_flow_version_id: str):
|
||||
return result.success(
|
||||
ApplicationVersionSerializer.Operate(
|
||||
|
|
@ -86,7 +84,8 @@ class ApplicationVersionView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Modify application version information")
|
||||
@log(menu='Application', operate="Modify application version information",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str, work_flow_version_id: str):
|
||||
return result.success(
|
||||
ApplicationVersionSerializer.Operate(
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ from application.serializers.application_serializers import ApplicationSerialize
|
|||
from application.serializers.application_statistics_serializers import ApplicationStatisticsSerializer
|
||||
from application.swagger_api.application_api import ApplicationApi
|
||||
from application.swagger_api.application_statistics_api import ApplicationStatisticsApi
|
||||
from application.views.common import get_application_operation_object
|
||||
from common.auth import TokenAuth, has_permissions
|
||||
from common.constants.permission_constants import CompareConstants, PermissionConstants, Permission, Group, Operate, \
|
||||
ViewPermission, RoleConstants
|
||||
|
|
@ -51,7 +52,6 @@ class ApplicationStatistics(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="User Statistics")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
||||
|
|
@ -76,7 +76,6 @@ class ApplicationStatistics(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="User demographic trends")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
||||
|
|
@ -102,7 +101,6 @@ class ApplicationStatistics(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Conversation statistics")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
||||
|
|
@ -128,7 +126,6 @@ class ApplicationStatistics(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Dialogue-related statistical trends")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
||||
|
|
@ -158,7 +155,8 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND), PermissionConstants.APPLICATION_EDIT,
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Modify application icon")
|
||||
@log(menu='Application', operate="Modify application icon",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.IconOperate(
|
||||
|
|
@ -190,7 +188,8 @@ class Application(APIView):
|
|||
)
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id')))
|
||||
@log(menu='Application', operate="Export Application")
|
||||
@log(menu='Application', operate="Export Application",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def get(self, request: Request, application_id: str):
|
||||
return ApplicationSerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).export()
|
||||
|
|
@ -201,7 +200,6 @@ class Application(APIView):
|
|||
operation_id=_("Get embedded js"),
|
||||
tags=[_("Application")],
|
||||
manual_parameters=ApplicationApi.ApiKey.get_request_params_api())
|
||||
@log(menu='Application', operate="Get embedded js")
|
||||
def get(self, request: Request):
|
||||
return ApplicationSerializer.Embed(
|
||||
data={'protocol': request.query_params.get('protocol'), 'token': request.query_params.get('token'),
|
||||
|
|
@ -220,7 +218,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get a list of models")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -239,7 +236,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get model parameter form")
|
||||
def get(self, request: Request, application_id: str, model_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -258,7 +254,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get a list of function libraries")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -278,7 +273,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get library details")
|
||||
def get(self, request: Request, application_id: str, function_lib_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -297,7 +291,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get the list of apps created by the current user")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -317,7 +310,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get application data")
|
||||
def get(self, request: Request, application_id: str, app_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -331,7 +323,6 @@ class Application(APIView):
|
|||
@swagger_auto_schema(operation_summary=_("Get application related information"),
|
||||
operation_id=_("Get application related information"),
|
||||
tags=[_("Application/Chat")])
|
||||
@log(menu='Application', operate="Get application related information")
|
||||
def get(self, request: Request):
|
||||
if 'application_id' in request.auth.keywords:
|
||||
return result.success(ApplicationSerializer.Operate(
|
||||
|
|
@ -352,7 +343,8 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Add ApiKey")
|
||||
@log(menu='Application', operate="Add ApiKey",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def post(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.ApplicationKeySerializer(
|
||||
|
|
@ -369,7 +361,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get the application API_KEY list")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(ApplicationSerializer.ApplicationKeySerializer(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).list())
|
||||
|
|
@ -389,7 +380,8 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND), PermissionConstants.APPLICATION_EDIT,
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Modify application API_KEY")
|
||||
@log(menu='Application', operate="Modify application API_KEY",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str, api_key_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.ApplicationKeySerializer.Operate(
|
||||
|
|
@ -407,7 +399,8 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND), PermissionConstants.APPLICATION_DELETE,
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Delete Application API_KEY")
|
||||
@log(menu='Application', operate="Delete Application API_KEY",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def delete(self, request: Request, application_id: str, api_key_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.ApplicationKeySerializer.Operate(
|
||||
|
|
@ -428,7 +421,8 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Modify Application AccessToken")
|
||||
@log(menu='Application', operate="Modify Application AccessToken",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.AccessTokenSerializer(data={'application_id': application_id}).edit(
|
||||
|
|
@ -445,7 +439,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get the application AccessToken information")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.AccessTokenSerializer(data={'application_id': application_id}).one())
|
||||
|
|
@ -481,7 +474,8 @@ class Application(APIView):
|
|||
request_body=ApplicationApi.Create.get_request_body_api(),
|
||||
tags=[_('Application')])
|
||||
@has_permissions(PermissionConstants.APPLICATION_CREATE, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Create an application")
|
||||
@log(menu='Application', operate="Create an application",
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('name')})
|
||||
def post(self, request: Request):
|
||||
return result.success(ApplicationSerializer.Create(data={'user_id': request.user.id}).insert(request.data))
|
||||
|
||||
|
|
@ -492,7 +486,6 @@ class Application(APIView):
|
|||
responses=result.get_api_array_response(ApplicationApi.get_response_body_api()),
|
||||
tags=[_('Application')])
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Get the application list")
|
||||
def get(self, request: Request):
|
||||
return result.success(
|
||||
ApplicationSerializer.Query(
|
||||
|
|
@ -512,7 +505,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Hit Test List")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.HitTest(data={'id': application_id, 'user_id': request.user.id,
|
||||
|
|
@ -538,7 +530,8 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Publishing an application")
|
||||
@log(menu='Application', operate="Publishing an application",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -560,7 +553,8 @@ class Application(APIView):
|
|||
compare=CompareConstants.AND),
|
||||
lambda r, k: Permission(group=Group.APPLICATION, operate=Operate.DELETE,
|
||||
dynamic_tag=k.get('application_id')), compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Deleting application")
|
||||
@log(menu='Application', operate="Deleting application",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def delete(self, request: Request, application_id: str):
|
||||
return result.success(ApplicationSerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).delete(
|
||||
|
|
@ -578,7 +572,8 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Modify the application")
|
||||
@log(menu='Application', operate="Modify the application",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(
|
||||
|
|
@ -597,7 +592,6 @@ class Application(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get application details")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(ApplicationSerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).one())
|
||||
|
|
@ -618,7 +612,6 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get(
|
||||
'application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="Get the knowledge base available to the current application")
|
||||
def get(self, request: Request, application_id: str):
|
||||
return result.success(ApplicationSerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).list_dataset())
|
||||
|
|
@ -634,7 +627,6 @@ class Application(APIView):
|
|||
responses=result.get_page_api_response(ApplicationApi.get_response_body_api()),
|
||||
tags=[_('Application')])
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Get the application list by page")
|
||||
def get(self, request: Request, current_page: int, page_size: int):
|
||||
return result.success(
|
||||
ApplicationSerializer.Query(
|
||||
|
|
@ -652,7 +644,8 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get(
|
||||
'application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="speech to text")
|
||||
@log(menu='Application', operate="speech to text",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def post(self, request: Request, application_id: str):
|
||||
return result.success(
|
||||
ApplicationSerializer.Operate(data={'application_id': application_id, 'user_id': request.user.id})
|
||||
|
|
@ -675,7 +668,8 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get(
|
||||
'application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="text to speech")
|
||||
@log(menu='Application', operate="text to speech",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def post(self, request: Request, application_id: str):
|
||||
byte_data = ApplicationSerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).text_to_speech(
|
||||
|
|
@ -694,7 +688,8 @@ class Application(APIView):
|
|||
dynamic_tag=keywords.get(
|
||||
'application_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Application', operate="trial listening")
|
||||
@log(menu='Application', operate="trial listening",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def post(self, request: Request, application_id: str):
|
||||
byte_data = ApplicationSerializer.Operate(
|
||||
data={'application_id': application_id, 'user_id': request.user.id}).play_demo_text(request.data)
|
||||
|
|
@ -706,7 +701,6 @@ class Application(APIView):
|
|||
|
||||
@action(methods=['GET'], detail=False)
|
||||
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Application', operate="Get the MCP server tools")
|
||||
def get(self, request: Request):
|
||||
return result.success(ApplicationSerializer.McpServers(
|
||||
data={'mcp_servers': request.query_params.get('mcp_servers')}).get_mcp_servers())
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from application.serializers.chat_message_serializers import ChatMessageSerializ
|
|||
from application.serializers.chat_serializers import ChatSerializers, ChatRecordSerializer
|
||||
from application.swagger_api.chat_api import ChatApi, VoteApi, ChatRecordApi, ImproveApi, ChatRecordImproveApi, \
|
||||
ChatClientHistoryApi, OpenAIChatApi
|
||||
from application.views import get_application_operation_object
|
||||
from common.auth import TokenAuth, has_permissions, OpenAIKeyAuth
|
||||
from common.constants.authentication_type import AuthenticationType
|
||||
from common.constants.permission_constants import Permission, Group, Operate, \
|
||||
|
|
@ -178,7 +179,8 @@ class ChatView(APIView):
|
|||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND),
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Application/Conversation Log', operate="Delete a conversation")
|
||||
@log(menu='Application/Conversation Log', operate="Delete a conversation",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def delete(self, request: Request, application_id: str, chat_id: str):
|
||||
return result.success(
|
||||
ChatSerializers.Operate(
|
||||
|
|
@ -201,7 +203,6 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))])
|
||||
)
|
||||
@log(menu='Application/Conversation Log', operate="Get client conversation list by paging")
|
||||
def get(self, request: Request, application_id: str, current_page: int, page_size: int):
|
||||
return result.success(ChatSerializers.ClientChatHistory(
|
||||
data={'client_id': request.auth.client_id, 'application_id': application_id}).page(
|
||||
|
|
@ -221,7 +222,8 @@ class ChatView(APIView):
|
|||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND),
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Application/Conversation Log', operate="Client deletes conversation")
|
||||
@log(menu='Application/Conversation Log', operate="Client deletes conversation",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def delete(self, request: Request, application_id: str, chat_id: str):
|
||||
return result.success(
|
||||
ChatSerializers.Operate(
|
||||
|
|
@ -239,7 +241,8 @@ class ChatView(APIView):
|
|||
dynamic_tag=keywords.get('application_id'))],
|
||||
compare=CompareConstants.AND),
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Application/Conversation Log', operate="Client modifies dialogue summary")
|
||||
@log(menu='Application/Conversation Log', operate="Client modifies dialogue summary",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str, chat_id: str):
|
||||
return result.success(
|
||||
ChatSerializers.Operate(
|
||||
|
|
@ -261,7 +264,6 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))])
|
||||
)
|
||||
@log(menu='Application/Conversation Log', operate="Get the conversation list by page")
|
||||
def get(self, request: Request, application_id: str, current_page: int, page_size: int):
|
||||
return result.success(ChatSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'application_id': application_id,
|
||||
|
|
@ -287,7 +289,6 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))])
|
||||
)
|
||||
@log(menu='Application/Conversation Log', operate="Get conversation record details")
|
||||
def get(self, request: Request, application_id: str, chat_id: str, chat_record_id: str):
|
||||
return result.success(ChatRecordSerializer.Operate(
|
||||
data={'application_id': application_id,
|
||||
|
|
@ -306,7 +307,6 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))])
|
||||
)
|
||||
@log(menu='Application/Conversation Log', operate="Get a list of conversation records")
|
||||
def get(self, request: Request, application_id: str, chat_id: str):
|
||||
return result.success(ChatRecordSerializer.Query(
|
||||
data={'application_id': application_id,
|
||||
|
|
@ -328,7 +328,6 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))])
|
||||
)
|
||||
@log(menu='Application/Conversation Log', operate="Get the conversation history list by page")
|
||||
def get(self, request: Request, application_id: str, chat_id: str, current_page: int, page_size: int):
|
||||
return result.success(ChatRecordSerializer.Query(
|
||||
data={'application_id': application_id,
|
||||
|
|
@ -352,7 +351,8 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))])
|
||||
)
|
||||
@log(menu='Application/Conversation Log', operate="Like, Dislike")
|
||||
@log(menu='Application/Conversation Log', operate="Like, Dislike",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str, chat_id: str, chat_record_id: str):
|
||||
return result.success(ChatRecordSerializer.Vote(
|
||||
data={'vote_status': request.data.get('vote_status'), 'chat_id': chat_id,
|
||||
|
|
@ -373,7 +373,6 @@ class ChatView(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('application_id'))]
|
||||
))
|
||||
@log(menu='Application/Conversation Log', operate="Get the list of marked paragraphs")
|
||||
def get(self, request: Request, application_id: str, chat_id: str, chat_record_id: str):
|
||||
return result.success(ChatRecordSerializer.ChatRecordImprove(
|
||||
data={'chat_id': chat_id, 'chat_record_id': chat_record_id}).get())
|
||||
|
|
@ -401,7 +400,8 @@ class ChatView(APIView):
|
|||
'dataset_id'))],
|
||||
compare=CompareConstants.AND
|
||||
), compare=CompareConstants.AND)
|
||||
@log(menu='Application/Conversation Log', operate="Annotation")
|
||||
@log(menu='Application/Conversation Log', operate="Annotation",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def put(self, request: Request, application_id: str, chat_id: str, chat_record_id: str, dataset_id: str,
|
||||
document_id: str):
|
||||
return result.success(ChatRecordSerializer.Improve(
|
||||
|
|
@ -427,7 +427,8 @@ class ChatView(APIView):
|
|||
'dataset_id'))],
|
||||
compare=CompareConstants.AND
|
||||
), compare=CompareConstants.AND)
|
||||
@log(menu='Application/Conversation Log', operate="Add to Knowledge Base")
|
||||
@log(menu='Application/Conversation Log', operate="Add to Knowledge Base",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def post(self, request: Request, application_id: str, dataset_id: str):
|
||||
return result.success(ChatRecordSerializer.PostImprove().post_improve(request.data))
|
||||
|
||||
|
|
@ -453,7 +454,8 @@ class ChatView(APIView):
|
|||
'dataset_id'))],
|
||||
compare=CompareConstants.AND
|
||||
), compare=CompareConstants.AND)
|
||||
@log(menu='Application/Conversation Log', operate="Delete a Annotation")
|
||||
@log(menu='Application/Conversation Log', operate="Delete a Annotation",
|
||||
get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')))
|
||||
def delete(self, request: Request, application_id: str, chat_id: str, chat_record_id: str,
|
||||
dataset_id: str,
|
||||
document_id: str, paragraph_id: str):
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
# coding=utf-8
|
||||
"""
|
||||
@project: MaxKB
|
||||
@Author:虎
|
||||
@file: common.py
|
||||
@date:2025/3/25 16:56
|
||||
@desc:
|
||||
"""
|
||||
|
||||
from django.db.models import QuerySet
|
||||
|
||||
from application.models import Application
|
||||
|
||||
|
||||
def get_application_operation_object(application_id):
|
||||
application_model = QuerySet(model=Application).filter(id=application_id).first()
|
||||
if application_model is not None:
|
||||
return {
|
||||
"name": application_model.name
|
||||
}
|
||||
return {}
|
||||
|
|
@ -57,7 +57,8 @@ def _get_details(request):
|
|||
}
|
||||
|
||||
|
||||
def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address, get_details=_get_details):
|
||||
def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address, get_details=_get_details,
|
||||
get_operation_object=None):
|
||||
"""
|
||||
记录审计日志
|
||||
@param menu: 操作菜单 str
|
||||
|
|
@ -65,12 +66,19 @@ def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address,
|
|||
@param get_user: 获取用户
|
||||
@param get_ip_address:获取IP地址
|
||||
@param get_details: 获取执行详情
|
||||
@param get_operation_object: 获取操作对象
|
||||
@return:
|
||||
"""
|
||||
|
||||
def inner(func):
|
||||
def run(view, request, **kwargs):
|
||||
status = 200
|
||||
operation_object = {}
|
||||
try:
|
||||
if get_operation_object is not None:
|
||||
operation_object = get_operation_object(request, kwargs)
|
||||
except Exception as e:
|
||||
pass
|
||||
try:
|
||||
return func(view, request, **kwargs)
|
||||
except Exception as e:
|
||||
|
|
@ -84,7 +92,8 @@ def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address,
|
|||
if callable(operate):
|
||||
_operate = operate(request)
|
||||
# 插入审计日志
|
||||
Log(menu=menu, operate=_operate, user=user, status=status, ip_address=ip, details=details).save()
|
||||
Log(menu=menu, operate=_operate, user=user, status=status, ip_address=ip, details=details,
|
||||
operation_object=operation_object).save()
|
||||
|
||||
return run
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
# coding=utf-8
|
||||
"""
|
||||
@project: MaxKB
|
||||
@Author:虎
|
||||
@file: common.py.py
|
||||
@date:2025/3/25 15:43
|
||||
@desc:
|
||||
"""
|
||||
from django.db.models import QuerySet
|
||||
|
||||
from dataset.models import DataSet, Document
|
||||
|
||||
|
||||
def get_dataset_operation_object(dataset_id: str):
|
||||
dataset_model = QuerySet(model=DataSet).filter(id=dataset_id).first()
|
||||
if dataset_model is not None:
|
||||
return {
|
||||
"name": dataset_model.name,
|
||||
"desc": dataset_model.desc,
|
||||
"type": dataset_model.type,
|
||||
"create_time": dataset_model.create_time,
|
||||
"update_time": dataset_model.update_time
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_document_operation_object(document_id: str):
|
||||
document_model = QuerySet(model=Document).filter(id=document_id).first()
|
||||
if document_model is not None:
|
||||
return {
|
||||
"name": document_model.name,
|
||||
"type": document_model.type,
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_document_operation_object_batch(document_id_list: str):
|
||||
document_model_list = QuerySet(model=Document).filter(id__in=document_id_list)
|
||||
if document_model_list is not None:
|
||||
return {
|
||||
"name": f'[{",".join([document_model.name for document_model in document_model_list])}]',
|
||||
'document_list': [{'name': document_model.name, 'type': document_model.type} for document_model in
|
||||
document_model_list]
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_dataset_document_operation_object(dataset_dict: dict, document_dict: dict):
|
||||
return {
|
||||
'name': f'{dataset_dict.get("name", "")}/{document_dict.get("name", "")}',
|
||||
'dataset_name': dataset_dict.get("name", ""),
|
||||
'dataset_desc': dataset_dict.get("desc", ""),
|
||||
'dataset_type': dataset_dict.get("type", ""),
|
||||
'document_name': document_dict.get("name", ""),
|
||||
'document_type': document_dict.get("type", ""),
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ from rest_framework.parsers import MultiPartParser
|
|||
from rest_framework.views import APIView
|
||||
from rest_framework.views import Request
|
||||
|
||||
import dataset.models
|
||||
from common.auth import TokenAuth, has_permissions
|
||||
from common.constants.permission_constants import PermissionConstants, CompareConstants, Permission, Group, Operate, \
|
||||
ViewPermission, RoleConstants
|
||||
|
|
@ -21,6 +22,7 @@ from common.response import result
|
|||
from common.response.result import get_page_request_params, get_page_api_response, get_api_response
|
||||
from common.swagger_api.common_api import CommonApi
|
||||
from dataset.serializers.dataset_serializers import DataSetSerializers
|
||||
from dataset.views.common import get_dataset_operation_object
|
||||
from setting.serializers.provider_serializers import ModelSerializer
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
|
@ -43,7 +45,8 @@ class Dataset(APIView):
|
|||
dynamic_tag=keywords.get('dataset_id'))],
|
||||
compare=CompareConstants.AND), PermissionConstants.DATASET_EDIT,
|
||||
compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Synchronize the knowledge base of the website")
|
||||
@log(menu='Knowledge Base', operate="Synchronize the knowledge base of the website",
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(DataSetSerializers.SyncWeb(
|
||||
data={'sync_type': request.query_params.get('sync_type'), 'id': dataset_id,
|
||||
|
|
@ -62,7 +65,9 @@ class Dataset(APIView):
|
|||
tags=[_('Knowledge Base')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.DATASET_CREATE, compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Create QA knowledge base")
|
||||
@log(menu='Knowledge Base', operate="Create QA knowledge base",
|
||||
get_operation_object=lambda r, keywords: {'name': r.data.get('name'), 'desc': r.data.get('desc'),
|
||||
'file_list': r.FILES.getlist('file')})
|
||||
def post(self, request: Request):
|
||||
return result.success(DataSetSerializers.Create(data={'user_id': request.user.id}).save_qa({
|
||||
'file_list': request.FILES.getlist('file'),
|
||||
|
|
@ -82,7 +87,13 @@ class Dataset(APIView):
|
|||
tags=[_('Knowledge Base')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.DATASET_CREATE, compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Create a web site knowledge base")
|
||||
@log(menu='Knowledge Base', operate="Create a web site knowledge base",
|
||||
get_operation_object=lambda r, keywords: {'name': r.data.get('name'), 'desc': r.data.get('desc'),
|
||||
'file_list': r.FILES.getlist('file'),
|
||||
'meta': {'source_url': r.data.get('source_url'),
|
||||
'selector': r.data.get('selector'),
|
||||
'embedding_mode_id': r.data.get('embedding_mode_id')}}
|
||||
)
|
||||
def post(self, request: Request):
|
||||
return result.success(DataSetSerializers.Create(data={'user_id': request.user.id}).save_web(request.data))
|
||||
|
||||
|
|
@ -96,7 +107,6 @@ class Dataset(APIView):
|
|||
responses=result.get_api_array_response(
|
||||
DataSetSerializers.Application.get_response_body_api()),
|
||||
tags=[_('Knowledge Base')])
|
||||
@log(menu='Knowledge Base', operate="Get a list of applications available in the knowledge base")
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
return result.success(DataSetSerializers.Operate(
|
||||
data={'id': dataset_id, 'user_id': str(request.user.id)}).list_application())
|
||||
|
|
@ -108,7 +118,6 @@ class Dataset(APIView):
|
|||
responses=result.get_api_array_response(DataSetSerializers.Query.get_response_body_api()),
|
||||
tags=[_('Knowledge Base')])
|
||||
@has_permissions(PermissionConstants.DATASET_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Get a list of knowledge bases")
|
||||
def get(self, request: Request):
|
||||
data = {key: str(value) for key, value in request.query_params.items()}
|
||||
d = DataSetSerializers.Query(data={**data, 'user_id': str(request.user.id)})
|
||||
|
|
@ -123,7 +132,8 @@ class Dataset(APIView):
|
|||
tags=[_('Knowledge Base')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.DATASET_CREATE, compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Create a knowledge base")
|
||||
@log(menu='Knowledge Base', operate="Create a knowledge base",
|
||||
get_operation_object=lambda r, keywords: {'name': r.data.get('name'), 'desc': r.data.get('desc')})
|
||||
def post(self, request: Request):
|
||||
return result.success(DataSetSerializers.Create(data={'user_id': request.user.id}).save(request.data))
|
||||
|
||||
|
|
@ -137,7 +147,6 @@ class Dataset(APIView):
|
|||
tags=[_('Knowledge Base')])
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('dataset_id')))
|
||||
@log(menu='Knowledge Base', operate="Hit test list")
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DataSetSerializers.HitTest(data={'id': dataset_id, 'user_id': request.user.id,
|
||||
|
|
@ -158,7 +167,8 @@ class Dataset(APIView):
|
|||
)
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('dataset_id')))
|
||||
@log(menu='Knowledge Base', operate="Re-vectorize")
|
||||
@log(menu='Knowledge Base', operate="Re-vectorize",
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).re_embedding())
|
||||
|
|
@ -173,7 +183,8 @@ class Dataset(APIView):
|
|||
)
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('dataset_id')))
|
||||
@log(menu='Knowledge Base', operate="Export knowledge base")
|
||||
@log(menu='Knowledge Base', operate="Export knowledge base",
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
return DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).export_excel()
|
||||
|
||||
|
|
@ -188,7 +199,8 @@ class Dataset(APIView):
|
|||
)
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('dataset_id')))
|
||||
@log(menu='Knowledge Base', operate="Export knowledge base containing images")
|
||||
@log(menu='Knowledge Base', operate="Export knowledge base containing images",
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
return DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).export_zip()
|
||||
|
||||
|
|
@ -204,7 +216,8 @@ class Dataset(APIView):
|
|||
dynamic_tag=keywords.get('dataset_id')),
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.DELETE,
|
||||
dynamic_tag=k.get('dataset_id')), compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Delete knowledge base")
|
||||
@log(menu='Knowledge Base', operate="Delete knowledge base",
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def delete(self, request: Request, dataset_id: str):
|
||||
operate = DataSetSerializers.Operate(data={'id': dataset_id})
|
||||
return result.success(operate.delete())
|
||||
|
|
@ -217,7 +230,6 @@ class Dataset(APIView):
|
|||
tags=[_('Knowledge Base')])
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=keywords.get('dataset_id')))
|
||||
@log(menu='Knowledge Base', operate="Query knowledge base details based on knowledge base id")
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
return result.success(DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).one(
|
||||
user_id=request.user.id))
|
||||
|
|
@ -232,7 +244,8 @@ class Dataset(APIView):
|
|||
)
|
||||
@has_permissions(lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('dataset_id')))
|
||||
@log(menu='Knowledge Base', operate="Modify knowledge base information")
|
||||
@log(menu='Knowledge Base', operate="Modify knowledge base information",
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).edit(request.data,
|
||||
|
|
@ -250,7 +263,6 @@ class Dataset(APIView):
|
|||
tags=[_('Knowledge Base')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.DATASET_READ, compare=CompareConstants.AND)
|
||||
@log(menu='Knowledge Base', operate="Get the knowledge base paginated list")
|
||||
def get(self, request: Request, current_page, page_size):
|
||||
d = DataSetSerializers.Query(
|
||||
data={'name': request.query_params.get('name', None), 'desc': request.query_params.get("desc", None),
|
||||
|
|
@ -268,7 +280,6 @@ class Dataset(APIView):
|
|||
[lambda r, keywords: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=keywords.get('dataset_id'))],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='Knowledge Base', operate="Get the model list of the knowledge base")
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Query(
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
@desc:
|
||||
"""
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.parsers import MultiPartParser
|
||||
|
|
@ -21,7 +22,8 @@ from common.util.common import query_params_to_single_dict
|
|||
from dataset.serializers.common_serializers import BatchSerializer
|
||||
from dataset.serializers.document_serializers import DocumentSerializers, DocumentWebInstanceSerializer
|
||||
from dataset.swagger_api.document_api import DocumentApi
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from dataset.views.common import get_dataset_document_operation_object, get_dataset_operation_object, \
|
||||
get_document_operation_object_batch, get_document_operation_object
|
||||
|
||||
|
||||
class Template(APIView):
|
||||
|
|
@ -32,7 +34,6 @@ class Template(APIView):
|
|||
operation_id=_('Get QA template'),
|
||||
manual_parameters=DocumentSerializers.Export.get_request_params_api(),
|
||||
tags=[_('Knowledge Base/Documentation')])
|
||||
@log(menu='Knowledge Base/Documentation', operate="Get QA template")
|
||||
def get(self, request: Request):
|
||||
return DocumentSerializers.Export(data={'type': request.query_params.get('type')}).export(with_valid=True)
|
||||
|
||||
|
|
@ -45,7 +46,6 @@ class TableTemplate(APIView):
|
|||
operation_id=_('Get form template'),
|
||||
manual_parameters=DocumentSerializers.Export.get_request_params_api(),
|
||||
tags=[_('Knowledge Base/Documentation')])
|
||||
@log(menu='Knowledge Base/Documentation', operate="Get form template")
|
||||
def get(self, request: Request):
|
||||
return DocumentSerializers.Export(data={'type': request.query_params.get('type')}).table_export(with_valid=True)
|
||||
|
||||
|
|
@ -63,7 +63,11 @@ class WebDocument(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Create Web site documents")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Create Web site documents",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
{'name': f'[{",".join([url for url in r.data.get("source_url_list", [])])}]',
|
||||
'document_list': [{'name': url} for url in r.data.get("source_url_list", [])]}))
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Create(data={'dataset_id': dataset_id}).save_web(request.data, with_valid=True))
|
||||
|
|
@ -82,7 +86,11 @@ class QaDocument(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Import QA and create documentation")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Import QA and create documentation",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]',
|
||||
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}))
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Create(data={'dataset_id': dataset_id}).save_qa(
|
||||
|
|
@ -103,7 +111,11 @@ class TableDocument(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Import tables and create documents")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Import tables and create documents",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
{'name': f'[{",".join([file.name for file in r.FILES.getlist("file")])}]',
|
||||
'document_list': [{'name': file.name} for file in r.FILES.getlist("file")]}))
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Create(data={'dataset_id': dataset_id}).save_table(
|
||||
|
|
@ -124,7 +136,10 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Document', operate="Create document")
|
||||
@log(menu='Knowledge Base/Document', operate="Create document",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
{'name': r.data.get('name')}))
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Create(data={'dataset_id': dataset_id}).save(request.data, with_valid=True))
|
||||
|
|
@ -138,7 +153,6 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Document list")
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
d = DocumentSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id})
|
||||
|
|
@ -159,7 +173,10 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Modify document hit processing methods in batches")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Modify document hit processing methods in batches",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))))
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_edit_hit_handling(request.data))
|
||||
|
|
@ -179,7 +196,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Create documents in batches")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Create documents in batches",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
{'name': f'[{",".join([document.get("name") for document in r.data])}]',
|
||||
'document_list': r.data})
|
||||
)
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_save(request.data))
|
||||
|
||||
|
|
@ -194,7 +216,11 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Batch sync documents")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Batch sync documents",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list')))
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_sync(request.data))
|
||||
|
||||
|
|
@ -209,7 +235,10 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Delete documents in batches")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Delete documents in batches",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))))
|
||||
def delete(self, request: Request, dataset_id: str):
|
||||
return result.success(DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_delete(request.data))
|
||||
|
||||
|
|
@ -226,7 +255,11 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Synchronize web site types")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Synchronize web site types",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
))
|
||||
def put(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Sync(data={'document_id': document_id, 'dataset_id': dataset_id}).sync(
|
||||
|
|
@ -246,7 +279,11 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Cancel task")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Cancel task",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
))
|
||||
def put(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id}).cancel(
|
||||
|
|
@ -267,7 +304,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Cancel tasks in batches")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Cancel tasks in batches",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_cancel(request.data))
|
||||
|
|
@ -286,7 +328,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Refresh document vector library")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Refresh document vector library",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id}).refresh(
|
||||
|
|
@ -307,7 +354,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Batch refresh document vector library")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Batch refresh document vector library",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data.get('id_list'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_refresh(request.data))
|
||||
|
|
@ -330,7 +382,12 @@ class Document(APIView):
|
|||
dynamic_tag=k.get('target_dataset_id')),
|
||||
compare=CompareConstants.AND
|
||||
)
|
||||
@log(menu='Knowledge Base/Documentation', operate="Migrate documents in batches")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Migrate documents in batches",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data)
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, target_dataset_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Migrate(
|
||||
|
|
@ -350,7 +407,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Export document")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Export document",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def get(self, request: Request, dataset_id: str, document_id: str):
|
||||
return DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id}).export()
|
||||
|
||||
|
|
@ -365,7 +427,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Export Zip document")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Export Zip document",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def get(self, request: Request, dataset_id: str, document_id: str):
|
||||
return DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id}).export_zip()
|
||||
|
||||
|
|
@ -381,7 +448,6 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Get document details")
|
||||
def get(self, request: Request, dataset_id: str, document_id: str):
|
||||
operate = DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id})
|
||||
operate.is_valid(raise_exception=True)
|
||||
|
|
@ -398,7 +464,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Modify document")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Modify document",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(
|
||||
DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id}).edit(
|
||||
|
|
@ -414,7 +485,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Delete document")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Delete document",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def delete(self, request: Request, dataset_id: str, document_id: str):
|
||||
operate = DocumentSerializers.Operate(data={'document_id': document_id, 'dataset_id': dataset_id})
|
||||
operate.is_valid(raise_exception=True)
|
||||
|
|
@ -427,7 +503,6 @@ class Document(APIView):
|
|||
@swagger_auto_schema(operation_summary=_('Get a list of segment IDs'),
|
||||
operation_id=_('Get a list of segment IDs'),
|
||||
tags=[_('Knowledge Base/Documentation')])
|
||||
@log(menu='Knowledge Base/Documentation', operate="Get a list of segment IDs")
|
||||
def get(self, request: Request):
|
||||
return result.success(DocumentSerializers.SplitPattern.list())
|
||||
|
||||
|
|
@ -440,7 +515,6 @@ class Document(APIView):
|
|||
operation_id=_('Segmented document'),
|
||||
manual_parameters=DocumentSerializers.Split.get_request_params_api(),
|
||||
tags=[_('Knowledge Base/Documentation')])
|
||||
@log(menu='Knowledge Base/Documentation', operate="Segmented document")
|
||||
def post(self, request: Request):
|
||||
split_data = {'file': request.FILES.getlist('file')}
|
||||
request_data = request.data
|
||||
|
|
@ -468,7 +542,6 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Get the knowledge base paginated list")
|
||||
def get(self, request: Request, dataset_id: str, current_page, page_size):
|
||||
d = DocumentSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id})
|
||||
|
|
@ -482,7 +555,12 @@ class Document(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation', operate="Batch generate related documents")
|
||||
@log(menu='Knowledge Base/Documentation', operate="Batch generate related documents",
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object_batch(r.data.get('document_id_list'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str):
|
||||
return result.success(DocumentSerializers.BatchGenerateRelated(data={'dataset_id': dataset_id})
|
||||
.batch_generate_related(request.data))
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ from dataset.serializers.common_serializers import BatchSerializer
|
|||
from dataset.serializers.paragraph_serializers import ParagraphSerializers
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from dataset.views import get_dataset_document_operation_object, get_dataset_operation_object, \
|
||||
get_document_operation_object
|
||||
|
||||
|
||||
class Paragraph(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
|
@ -34,7 +37,6 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Paragraph list')
|
||||
def get(self, request: Request, dataset_id: str, document_id: str):
|
||||
q = ParagraphSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id,
|
||||
|
|
@ -52,7 +54,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Create Paragraph')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Create Paragraph',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def post(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(
|
||||
ParagraphSerializers.Create(data={'dataset_id': dataset_id, 'document_id': document_id}).save(request.data))
|
||||
|
|
@ -70,7 +77,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Add associated questions')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Add associated questions',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def post(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str):
|
||||
return result.success(ParagraphSerializers.Problem(
|
||||
data={"dataset_id": dataset_id, 'document_id': document_id, 'paragraph_id': paragraph_id}).save(
|
||||
|
|
@ -86,7 +98,6 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Get a list of paragraph questions')
|
||||
def get(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str):
|
||||
return result.success(ParagraphSerializers.Problem(
|
||||
data={"dataset_id": dataset_id, 'document_id': document_id, 'paragraph_id': paragraph_id}).list(
|
||||
|
|
@ -104,7 +115,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Disassociation issue')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Disassociation issue',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str, problem_id: str):
|
||||
return result.success(ParagraphSerializers.Association(
|
||||
data={'dataset_id': dataset_id, 'document_id': document_id, 'paragraph_id': paragraph_id,
|
||||
|
|
@ -122,7 +138,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Related questions')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Related questions',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str, problem_id: str):
|
||||
return result.success(ParagraphSerializers.Association(
|
||||
data={'dataset_id': dataset_id, 'document_id': document_id, 'paragraph_id': paragraph_id,
|
||||
|
|
@ -141,7 +162,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Modify paragraph data')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Modify paragraph data',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str):
|
||||
o = ParagraphSerializers.Operate(
|
||||
data={"paragraph_id": paragraph_id, 'dataset_id': dataset_id, 'document_id': document_id})
|
||||
|
|
@ -157,7 +183,6 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Get paragraph details')
|
||||
def get(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str):
|
||||
o = ParagraphSerializers.Operate(
|
||||
data={"dataset_id": dataset_id, 'document_id': document_id, "paragraph_id": paragraph_id})
|
||||
|
|
@ -173,7 +198,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Delete paragraph')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Delete paragraph',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def delete(self, request: Request, dataset_id: str, document_id: str, paragraph_id: str):
|
||||
o = ParagraphSerializers.Operate(
|
||||
data={"dataset_id": dataset_id, 'document_id': document_id, "paragraph_id": paragraph_id})
|
||||
|
|
@ -194,7 +224,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Delete paragraphs in batches')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Delete paragraphs in batches',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def delete(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(ParagraphSerializers.Batch(
|
||||
data={"dataset_id": dataset_id, 'document_id': document_id}).batch_delete(request.data))
|
||||
|
|
@ -217,7 +252,12 @@ class Paragraph(APIView):
|
|||
dynamic_tag=k.get('target_dataset_id')),
|
||||
compare=CompareConstants.AND
|
||||
)
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Migrate paragraphs in batches')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Migrate paragraphs in batches',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, target_dataset_id: str, document_id: str, target_document_id):
|
||||
return result.success(
|
||||
ParagraphSerializers.Migrate(
|
||||
|
|
@ -239,7 +279,6 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Get paragraph list by pagination')
|
||||
def get(self, request: Request, dataset_id: str, document_id: str, current_page, page_size):
|
||||
d = ParagraphSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id,
|
||||
|
|
@ -254,7 +293,12 @@ class Paragraph(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Batch generate related')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph', operate='Batch generate related',
|
||||
get_operation_object=lambda r, keywords: get_dataset_document_operation_object(
|
||||
get_dataset_operation_object(keywords.get('dataset_id')),
|
||||
get_document_operation_object(keywords.get('document_id'))
|
||||
)
|
||||
)
|
||||
def put(self, request: Request, dataset_id: str, document_id: str):
|
||||
return result.success(
|
||||
ParagraphSerializers.BatchGenerateRelated(data={'dataset_id': dataset_id, 'document_id': document_id})
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ from dataset.serializers.problem_serializers import ProblemSerializers
|
|||
from dataset.swagger_api.problem_api import ProblemApi
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from dataset.views import get_dataset_operation_object
|
||||
|
||||
|
||||
class Problem(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
|
@ -34,7 +36,6 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Question list')
|
||||
def get(self, request: Request, dataset_id: str):
|
||||
q = ProblemSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id})
|
||||
|
|
@ -51,7 +52,9 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Create question')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Create question',
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id'))
|
||||
)
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
ProblemSerializers.Create(
|
||||
|
|
@ -69,7 +72,6 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Get a list of associated paragraphs')
|
||||
def get(self, request: Request, dataset_id: str, problem_id: str):
|
||||
return result.success(ProblemSerializers.Operate(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id,
|
||||
|
|
@ -89,7 +91,8 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Batch deletion issues')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Batch deletion issues',
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def delete(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
ProblemSerializers.BatchOperate(data={'dataset_id': dataset_id}).delete(request.data))
|
||||
|
|
@ -104,7 +107,8 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Batch associated paragraphs')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Batch associated paragraphs',
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def post(self, request: Request, dataset_id: str):
|
||||
return result.success(
|
||||
ProblemSerializers.BatchOperate(data={'dataset_id': dataset_id}).association(request.data))
|
||||
|
|
@ -121,7 +125,8 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Delete question')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Delete question',
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def delete(self, request: Request, dataset_id: str, problem_id: str):
|
||||
return result.success(ProblemSerializers.Operate(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id,
|
||||
|
|
@ -137,7 +142,8 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.MANAGE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Modify question')
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Modify question',
|
||||
get_operation_object=lambda r, keywords: get_dataset_operation_object(keywords.get('dataset_id')))
|
||||
def put(self, request: Request, dataset_id: str, problem_id: str):
|
||||
return result.success(ProblemSerializers.Operate(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id,
|
||||
|
|
@ -156,7 +162,6 @@ class Problem(APIView):
|
|||
@has_permissions(
|
||||
lambda r, k: Permission(group=Group.DATASET, operate=Operate.USE,
|
||||
dynamic_tag=k.get('dataset_id')))
|
||||
@log(menu='Knowledge Base/Documentation/Paragraph/Question', operate='Get the list of questions by page')
|
||||
def get(self, request: Request, dataset_id: str, current_page, page_size):
|
||||
d = ProblemSerializers.Query(
|
||||
data={**query_params_to_single_dict(request.query_params), 'dataset_id': dataset_id})
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
# coding=utf-8
|
||||
"""
|
||||
@project: MaxKB
|
||||
@Author:虎
|
||||
@file: common.py
|
||||
@date:2025/3/25 17:27
|
||||
@desc:
|
||||
"""
|
||||
from django.db.models import QuerySet
|
||||
|
||||
from function_lib.models.function import FunctionLib
|
||||
|
||||
|
||||
def get_function_lib_operation_object(function_lib_id):
|
||||
function_lib_model = QuerySet(model=FunctionLib).filter(id=function_lib_id).first()
|
||||
if function_lib_model is not None:
|
||||
return {
|
||||
"name": function_lib_model.name
|
||||
}
|
||||
return {}
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
@date:2024/8/2 17:08
|
||||
@desc:
|
||||
"""
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.parsers import MultiPartParser
|
||||
|
|
@ -13,12 +14,12 @@ from rest_framework.request import Request
|
|||
from rest_framework.views import APIView
|
||||
|
||||
from common.auth import TokenAuth, has_permissions
|
||||
from common.constants.permission_constants import RoleConstants, Permission, Group, Operate
|
||||
from common.constants.permission_constants import RoleConstants
|
||||
from common.log.log import log
|
||||
from common.response import result
|
||||
from function_lib.serializers.function_lib_serializer import FunctionLibSerializer
|
||||
from function_lib.swagger_api.function_lib_api import FunctionLibApi
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from function_lib.views.common import get_function_lib_operation_object
|
||||
|
||||
|
||||
class FunctionLibView(APIView):
|
||||
|
|
@ -45,7 +46,8 @@ class FunctionLibView(APIView):
|
|||
request_body=FunctionLibApi.Create.get_request_body_api(),
|
||||
tags=[_('Function')])
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Create function")
|
||||
@log(menu='Function', operate="Create function",
|
||||
get_operation_object=lambda r, k: r.data.get('name'))
|
||||
def post(self, request: Request):
|
||||
return result.success(FunctionLibSerializer.Create(data={'user_id': request.user.id}).insert(request.data))
|
||||
|
||||
|
|
@ -58,7 +60,6 @@ class FunctionLibView(APIView):
|
|||
request_body=FunctionLibApi.Debug.get_request_body_api(),
|
||||
tags=[_('Function')])
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Debug function")
|
||||
def post(self, request: Request):
|
||||
return result.success(
|
||||
FunctionLibSerializer.Debug(data={'user_id': request.user.id}).debug(
|
||||
|
|
@ -73,7 +74,8 @@ class FunctionLibView(APIView):
|
|||
request_body=FunctionLibApi.Edit.get_request_body_api(),
|
||||
tags=[_('Function')])
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Update function")
|
||||
@log(menu='Function', operate="Update function",
|
||||
get_operation_object=lambda r, k: get_function_lib_operation_object(k.get('function_lib_id')))
|
||||
def put(self, request: Request, function_lib_id: str):
|
||||
return result.success(
|
||||
FunctionLibSerializer.Operate(data={'user_id': request.user.id, 'id': function_lib_id}).edit(
|
||||
|
|
@ -84,7 +86,8 @@ class FunctionLibView(APIView):
|
|||
operation_id=_('Delete function'),
|
||||
tags=[_('Function')])
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Delete function")
|
||||
@log(menu='Function', operate="Delete function",
|
||||
get_operation_object=lambda r, k: get_function_lib_operation_object(k.get('function_lib_id')))
|
||||
def delete(self, request: Request, function_lib_id: str):
|
||||
return result.success(
|
||||
FunctionLibSerializer.Operate(data={'user_id': request.user.id, 'id': function_lib_id}).delete())
|
||||
|
|
@ -94,7 +97,6 @@ class FunctionLibView(APIView):
|
|||
operation_id=_('Get function details'),
|
||||
tags=[_('Function')])
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Get function details")
|
||||
def get(self, request: Request, function_lib_id: str):
|
||||
return result.success(
|
||||
FunctionLibSerializer.Operate(data={'user_id': request.user.id, 'id': function_lib_id}).one())
|
||||
|
|
@ -110,7 +112,6 @@ class FunctionLibView(APIView):
|
|||
responses=result.get_page_api_response(FunctionLibApi.get_response_body_api()),
|
||||
tags=[_('Function')])
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Get function list by pagination")
|
||||
def get(self, request: Request, current_page: int, page_size: int):
|
||||
return result.success(
|
||||
FunctionLibSerializer.Query(
|
||||
|
|
@ -145,7 +146,8 @@ class FunctionLibView(APIView):
|
|||
tags=[_("function")]
|
||||
)
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Export function")
|
||||
@log(menu='Function', operate="Export function",
|
||||
get_operation_object=lambda r, k: get_function_lib_operation_object(k.get('id')))
|
||||
def get(self, request: Request, id: str):
|
||||
return FunctionLibSerializer.Operate(
|
||||
data={'id': id, 'user_id': request.user.id}).export()
|
||||
|
|
@ -156,7 +158,8 @@ class FunctionLibView(APIView):
|
|||
|
||||
@action(methods=['PUT'], detail=False)
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Edit icon")
|
||||
@log(menu='Function', operate="Edit icon",
|
||||
get_operation_object=lambda r, k: get_function_lib_operation_object(k.get('id')))
|
||||
def put(self, request: Request, id: str):
|
||||
return result.success(
|
||||
FunctionLibSerializer.IconOperate(
|
||||
|
|
@ -168,9 +171,10 @@ class FunctionLibView(APIView):
|
|||
|
||||
@action(methods=['POST'], detail=False)
|
||||
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
||||
@log(menu='Function', operate="Add internal function")
|
||||
@log(menu='Function', operate="Add internal function",
|
||||
get_operation_object=lambda r, k: get_function_lib_operation_object(k.get('id')))
|
||||
def post(self, request: Request, id: str):
|
||||
return result.success(
|
||||
FunctionLibSerializer.InternalFunction(
|
||||
data={'id': id, 'user_id': request.user.id, 'name': request.data.get('name')})
|
||||
.add())
|
||||
.add())
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
# Generated by Django 4.2.18 on 2025-03-17 02:50
|
||||
|
||||
import uuid
|
||||
|
||||
from django.db import migrations, models
|
||||
# Generated by Django 4.2.18 on 2025-03-25 03:22
|
||||
|
||||
import common.encoder.encoder
|
||||
from django.db import migrations, models
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('setting', '0009_set_default_model_params_form'),
|
||||
]
|
||||
|
|
@ -18,15 +17,14 @@ class Migration(migrations.Migration):
|
|||
fields=[
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
|
||||
('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False,
|
||||
verbose_name='主键id')),
|
||||
('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
|
||||
('menu', models.CharField(max_length=128, verbose_name='操作菜单')),
|
||||
('operate', models.CharField(max_length=128, verbose_name='操作')),
|
||||
('operation_object', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='操作对象')),
|
||||
('user', models.JSONField(default=dict, verbose_name='用户信息')),
|
||||
('status', models.IntegerField(max_length=20, verbose_name='状态')),
|
||||
('ip_address', models.CharField(max_length=128, verbose_name='ip地址')),
|
||||
('details',
|
||||
models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='详情')),
|
||||
('details', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='详情')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'log',
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ class Log(AppModelMixin):
|
|||
|
||||
operate = models.CharField(max_length=128, verbose_name="操作")
|
||||
|
||||
operation_object = models.JSONField(verbose_name="操作对象", default=dict, encoder=SystemEncoder)
|
||||
|
||||
user = models.JSONField(verbose_name="用户信息", default=dict)
|
||||
|
||||
status = models.IntegerField(max_length=20, verbose_name="状态")
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ from setting.serializers.team_serializers import TeamMemberSerializer, get_respo
|
|||
UpdateTeamMemberPermissionSerializer
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from setting.views.common import get_member_operation_object, get_member_operation_object_batch
|
||||
|
||||
|
||||
class TeamMember(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
|
@ -29,7 +31,6 @@ class TeamMember(APIView):
|
|||
responses=result.get_api_response(get_response_body_api()),
|
||||
tags=[_('team')])
|
||||
@has_permissions(PermissionConstants.TEAM_READ)
|
||||
@log(menu='team', operate='Get a list of team members')
|
||||
def get(self, request: Request):
|
||||
return result.success(TeamMemberSerializer(data={'team_id': str(request.user.id)}).list_member())
|
||||
|
||||
|
|
@ -39,7 +40,8 @@ class TeamMember(APIView):
|
|||
request_body=TeamMemberSerializer().get_request_body_api(),
|
||||
tags=[_('team')])
|
||||
@has_permissions(PermissionConstants.TEAM_CREATE)
|
||||
@log(menu='team', operate='Add member')
|
||||
@log(menu='team', operate='Add member',
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('username_or_email')})
|
||||
def post(self, request: Request):
|
||||
team = TeamMemberSerializer(data={'team_id': str(request.user.id)})
|
||||
return result.success((team.add_member(**request.data)))
|
||||
|
|
@ -53,7 +55,8 @@ class TeamMember(APIView):
|
|||
request_body=TeamMemberSerializer.get_bach_request_body_api(),
|
||||
tags=[_('team')])
|
||||
@has_permissions(PermissionConstants.TEAM_CREATE)
|
||||
@log(menu='team', operate='Add members in batches')
|
||||
@log(menu='team', operate='Add members in batches',
|
||||
get_operation_object=lambda r, k: get_member_operation_object_batch(r.data))
|
||||
def post(self, request: Request):
|
||||
return result.success(
|
||||
TeamMemberSerializer(data={'team_id': request.user.id}).batch_add_member(request.data))
|
||||
|
|
@ -67,7 +70,6 @@ class TeamMember(APIView):
|
|||
manual_parameters=TeamMemberSerializer.Operate.get_request_params_api(),
|
||||
tags=[_('team')])
|
||||
@has_permissions(PermissionConstants.TEAM_READ)
|
||||
@log(menu='team', operate='Get team member permissions')
|
||||
def get(self, request: Request, member_id: str):
|
||||
return result.success(TeamMemberSerializer.Operate(
|
||||
data={'member_id': member_id, 'team_id': str(request.user.id)}).list_member_permission())
|
||||
|
|
@ -80,7 +82,9 @@ class TeamMember(APIView):
|
|||
tags=[_('team')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.TEAM_EDIT)
|
||||
@log(menu='team', operate='Update team member permissions')
|
||||
@log(menu='team', operate='Update team member permissions',
|
||||
get_operation_object=lambda r, k: get_member_operation_object(k.get('member_id'))
|
||||
)
|
||||
def put(self, request: Request, member_id: str):
|
||||
return result.success(TeamMemberSerializer.Operate(
|
||||
data={'member_id': member_id, 'team_id': str(request.user.id)}).edit(request.data))
|
||||
|
|
@ -92,7 +96,8 @@ class TeamMember(APIView):
|
|||
tags=[_('team')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.TEAM_DELETE)
|
||||
@log(menu='team', operate='Remove member')
|
||||
@log(menu='team', operate='Remove member',
|
||||
get_operation_object=lambda r, k: get_member_operation_object(k.get('member_id')))
|
||||
def delete(self, request: Request, member_id: str):
|
||||
return result.success(TeamMemberSerializer.Operate(
|
||||
data={'member_id': member_id, 'team_id': str(request.user.id)}).delete())
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
# coding=utf-8
|
||||
"""
|
||||
@project: MaxKB
|
||||
@Author:虎
|
||||
@file: common.py
|
||||
@date:2025/3/25 16:26
|
||||
@desc:
|
||||
"""
|
||||
from django.db.models import QuerySet
|
||||
|
||||
from common.util.common import encryption
|
||||
from setting.models import Model
|
||||
from users.models import User
|
||||
|
||||
|
||||
def get_model_operation_object(model_id):
|
||||
model_model = QuerySet(model=Model).filter(id=model_id).first()
|
||||
if model_model is not None:
|
||||
return {
|
||||
"name": model_model.name
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_member_operation_object(member_id):
|
||||
user_model = QuerySet(model=User).filter(id=member_id).first()
|
||||
if user_model is not None:
|
||||
return {
|
||||
"name": user_model.username
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_member_operation_object_batch(member_id_list):
|
||||
user_model_list = QuerySet(model=User).filter(id__in=member_id_list)
|
||||
if user_model_list is not None:
|
||||
return {
|
||||
"name": f'[{",".join([user.username for user in user_model_list])}]',
|
||||
"user_list": [{'name': user.username} for user in user_model_list]
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def encryption_str(_value):
|
||||
if isinstance(_value, str):
|
||||
return encryption(_value)
|
||||
return _value
|
||||
|
||||
|
||||
def encryption_credential(credential):
|
||||
if isinstance(credential, dict):
|
||||
return {key: encryption_str(credential.get(key)) for key in credential}
|
||||
return credential
|
||||
|
||||
|
||||
def get_edit_model_details(request):
|
||||
path = request.path
|
||||
body = request.data
|
||||
query = request.query_params
|
||||
credential = body.get('credential', {})
|
||||
credential_encryption_ed = encryption_credential(credential)
|
||||
return {
|
||||
'path': path,
|
||||
'body': {**body, 'credential': credential_encryption_ed},
|
||||
'query': query
|
||||
}
|
||||
|
||||
|
||||
def get_email_details(request):
|
||||
path = request.path
|
||||
body = request.data
|
||||
query = request.query_params
|
||||
email_host_password = body.get('email_host_password', '')
|
||||
return {
|
||||
'path': path,
|
||||
'body': {**body, 'email_host_password': encryption_str(email_host_password)},
|
||||
'query': query
|
||||
}
|
||||
|
|
@ -22,6 +22,8 @@ from setting.serializers.provider_serializers import ProviderSerializer, ModelSe
|
|||
from setting.swagger_api.provide_api import ProvideApi, ModelCreateApi, ModelQueryApi, ModelEditApi
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from setting.views.common import get_model_operation_object, get_edit_model_details
|
||||
|
||||
|
||||
class Model(APIView):
|
||||
authentication_classes = [TokenAuth]
|
||||
|
|
@ -32,7 +34,9 @@ class Model(APIView):
|
|||
request_body=ModelCreateApi.get_request_body_api()
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_CREATE)
|
||||
@log(menu='model', operate='Create model')
|
||||
@log(menu='model', operate='Create model',
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('name')},
|
||||
get_details=get_edit_model_details)
|
||||
def post(self, request: Request):
|
||||
return result.success(
|
||||
ModelSerializer.Create(data={**request.data, 'user_id': str(request.user.id)}).insert(request.user.id,
|
||||
|
|
@ -44,7 +48,6 @@ class Model(APIView):
|
|||
request_body=ModelCreateApi.get_request_body_api()
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_CREATE)
|
||||
@log(menu='model', operate='Download model, trial only with Ollama platform')
|
||||
def put(self, request: Request):
|
||||
return result.success(
|
||||
ModelSerializer.Create(data={**request.data, 'user_id': str(request.user.id)}).insert(request.user.id,
|
||||
|
|
@ -56,7 +59,6 @@ class Model(APIView):
|
|||
manual_parameters=ModelQueryApi.get_request_params_api()
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get model list')
|
||||
def get(self, request: Request):
|
||||
return result.success(
|
||||
ModelSerializer.Query(
|
||||
|
|
@ -73,8 +75,6 @@ class Model(APIView):
|
|||
'Query model meta information, this interface does not carry authentication information'),
|
||||
tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model',
|
||||
operate='Query model meta information, this interface does not carry authentication information')
|
||||
def get(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).one_meta(with_valid=True))
|
||||
|
|
@ -87,8 +87,6 @@ class Model(APIView):
|
|||
operation_id=_('Pause model download'),
|
||||
tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_CREATE)
|
||||
@log(menu='model',
|
||||
operate='Pause model download')
|
||||
def put(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).pause_download())
|
||||
|
|
@ -102,7 +100,6 @@ class Model(APIView):
|
|||
manual_parameters=ProvideApi.ModelForm.get_request_params_api(),
|
||||
tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get model parameter form')
|
||||
def get(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.ModelParams(data={'id': model_id, 'user_id': request.user.id}).get_model_params())
|
||||
|
|
@ -113,7 +110,8 @@ class Model(APIView):
|
|||
manual_parameters=ProvideApi.ModelForm.get_request_params_api(),
|
||||
tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Save model parameter form')
|
||||
@log(menu='model', operate='Save model parameter form',
|
||||
get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')))
|
||||
def put(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.ModelParamsForm(data={'id': model_id, 'user_id': request.user.id})
|
||||
|
|
@ -128,7 +126,9 @@ class Model(APIView):
|
|||
request_body=ModelEditApi.get_request_body_api()
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_CREATE)
|
||||
@log(menu='model', operate='Update model')
|
||||
@log(menu='model', operate='Update model',
|
||||
get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')),
|
||||
get_details=get_edit_model_details)
|
||||
def put(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).edit(request.data,
|
||||
|
|
@ -140,7 +140,8 @@ class Model(APIView):
|
|||
responses=result.get_default_response()
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_DELETE)
|
||||
@log(menu='model', operate='Delete model')
|
||||
@log(menu='model', operate='Delete model',
|
||||
get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')))
|
||||
def delete(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).delete())
|
||||
|
|
@ -149,7 +150,6 @@ class Model(APIView):
|
|||
@swagger_auto_schema(operation_summary=_('Query model details'),
|
||||
operation_id=_('Query model details'),
|
||||
tags=[_('model')])
|
||||
@log(menu='model', operate='Query model details')
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
def get(self, request: Request, model_id: str):
|
||||
return result.success(
|
||||
|
|
@ -179,7 +179,6 @@ class Provide(APIView):
|
|||
operation_id=_('Get a list of model suppliers')
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get a list of model suppliers')
|
||||
def get(self, request: Request):
|
||||
model_type = request.query_params.get('model_type')
|
||||
if model_type:
|
||||
|
|
@ -203,7 +202,6 @@ class Provide(APIView):
|
|||
responses=result.get_api_array_response(ProvideApi.ModelTypeList.get_response_body_api())
|
||||
, tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get a list of model types')
|
||||
def get(self, request: Request):
|
||||
provider = request.query_params.get('provider')
|
||||
return result.success(ModelProvideConstants[provider].value.get_model_type_list())
|
||||
|
|
@ -219,7 +217,6 @@ class Provide(APIView):
|
|||
, tags=[_('model')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get the model creation form')
|
||||
def get(self, request: Request):
|
||||
provider = request.query_params.get('provider')
|
||||
model_type = request.query_params.get('model_type')
|
||||
|
|
@ -239,7 +236,6 @@ class Provide(APIView):
|
|||
, tags=[_('model')]
|
||||
)
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get model default parameters')
|
||||
def get(self, request: Request):
|
||||
provider = request.query_params.get('provider')
|
||||
model_type = request.query_params.get('model_type')
|
||||
|
|
@ -256,7 +252,6 @@ class Provide(APIView):
|
|||
manual_parameters=ProvideApi.ModelForm.get_request_params_api(),
|
||||
tags=[_('model')])
|
||||
@has_permissions(PermissionConstants.MODEL_READ)
|
||||
@log(menu='model', operate='Get the model creation form')
|
||||
def get(self, request: Request):
|
||||
provider = request.query_params.get('provider')
|
||||
model_type = request.query_params.get('model_type')
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ from setting.serializers.system_setting import SystemSettingSerializer
|
|||
from setting.swagger_api.system_setting import SystemSettingEmailApi
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from setting.views.common import get_email_details
|
||||
|
||||
|
||||
class SystemSetting(APIView):
|
||||
class Email(APIView):
|
||||
|
|
@ -31,7 +33,9 @@ class SystemSetting(APIView):
|
|||
request_body=SystemSettingEmailApi.get_request_body_api(), tags=[_('Email settings')],
|
||||
responses=result.get_api_response(SystemSettingEmailApi.get_response_body_api()))
|
||||
@has_permissions(RoleConstants.ADMIN)
|
||||
@log(menu='Email settings', operate='Create or update email settings')
|
||||
@log(menu='Email settings', operate='Create or update email settings',
|
||||
get_details=get_email_details
|
||||
)
|
||||
def put(self, request: Request):
|
||||
return result.success(
|
||||
SystemSettingSerializer.EmailSerializer.Create(
|
||||
|
|
@ -44,7 +48,9 @@ class SystemSetting(APIView):
|
|||
responses=result.get_default_response(),
|
||||
tags=[_('Email settings')])
|
||||
@has_permissions(RoleConstants.ADMIN)
|
||||
@log(menu='Email settings', operate='Test email settings')
|
||||
@log(menu='Email settings', operate='Test email settings',
|
||||
get_details=get_email_details
|
||||
)
|
||||
def post(self, request: Request):
|
||||
return result.success(
|
||||
SystemSettingSerializer.EmailSerializer.Create(
|
||||
|
|
@ -56,7 +62,6 @@ class SystemSetting(APIView):
|
|||
responses=result.get_api_response(SystemSettingEmailApi.get_response_body_api()),
|
||||
tags=[_('Email settings')])
|
||||
@has_permissions(RoleConstants.ADMIN)
|
||||
@log(menu='Email settings', operate='Get email settings')
|
||||
def get(self, request: Request):
|
||||
return result.success(
|
||||
SystemSettingSerializer.EmailSerializer.one())
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
# coding=utf-8
|
||||
"""
|
||||
@project: MaxKB
|
||||
@Author:虎
|
||||
@file: common.py
|
||||
@date:2025/3/25 16:46
|
||||
@desc:
|
||||
"""
|
||||
from common.util.common import encryption
|
||||
from users.models import User
|
||||
from django.db.models import QuerySet
|
||||
|
||||
|
||||
def get_user_operation_object(user_id):
|
||||
user_model = QuerySet(model=User).filter(id=user_id).first()
|
||||
if user_model is not None:
|
||||
return {
|
||||
"name": user_model.username
|
||||
}
|
||||
return {}
|
||||
|
||||
|
||||
def get_re_password_details(request):
|
||||
path = request.path
|
||||
body = request.data
|
||||
query = request.query_params
|
||||
return {
|
||||
'path': path,
|
||||
'body': {**body, 'password': encryption(body.get('password', '')),
|
||||
're_password': encryption(body.get('re_password', ''))},
|
||||
'query': query
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
@desc:
|
||||
"""
|
||||
from django.core import cache
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from drf_yasg import openapi
|
||||
from drf_yasg.utils import swagger_auto_schema
|
||||
from rest_framework.decorators import action
|
||||
|
|
@ -26,7 +27,7 @@ from users.serializers.user_serializers import RegisterSerializer, LoginSerializ
|
|||
RePasswordSerializer, \
|
||||
SendEmailSerializer, UserProfile, UserSerializer, UserManageSerializer, UserInstanceSerializer, SystemSerializer, \
|
||||
SwitchLanguageSerializer
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from users.views.common import get_user_operation_object, get_re_password_details
|
||||
|
||||
user_cache = cache.caches['user_cache']
|
||||
token_cache = cache.caches['token_cache']
|
||||
|
|
@ -38,7 +39,6 @@ class Profile(APIView):
|
|||
operation_id=_("Get MaxKB related information"),
|
||||
responses=result.get_api_response(SystemSerializer.get_response_body_api()),
|
||||
tags=[_('System parameters')])
|
||||
@log(menu='System parameters', operate='Get MaxKB related information')
|
||||
def get(self, request: Request):
|
||||
return result.success(SystemSerializer.get_profile())
|
||||
|
||||
|
|
@ -52,7 +52,6 @@ class User(APIView):
|
|||
responses=result.get_api_response(UserProfile.get_response_body_api()),
|
||||
tags=[])
|
||||
@has_permissions(PermissionConstants.USER_READ)
|
||||
@log(menu='User', operate='Get current user information')
|
||||
def get(self, request: Request):
|
||||
return result.success(UserProfile.get_user_profile(request.user))
|
||||
|
||||
|
|
@ -66,7 +65,6 @@ class User(APIView):
|
|||
responses=result.get_api_array_response(UserSerializer.Query.get_response_body_api()),
|
||||
tags=[_("User")])
|
||||
@has_permissions(PermissionConstants.USER_READ)
|
||||
@log(menu='User', operate='Get user list')
|
||||
def get(self, request: Request):
|
||||
return result.success(
|
||||
UserSerializer.Query(data={'email_or_username': request.query_params.get('email_or_username')}).list())
|
||||
|
|
@ -88,7 +86,8 @@ class SwitchUserLanguageView(APIView):
|
|||
),
|
||||
responses=RePasswordSerializer().get_response_body_api(),
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Switch Language')
|
||||
@log(menu='User', operate='Switch Language',
|
||||
get_operation_object=lambda r, k: {'name': r.user.username})
|
||||
def post(self, request: Request):
|
||||
data = {**request.data, 'user_id': request.user.id}
|
||||
return result.success(SwitchLanguageSerializer(data=data).switch())
|
||||
|
|
@ -114,7 +113,9 @@ class ResetCurrentUserPasswordView(APIView):
|
|||
),
|
||||
responses=RePasswordSerializer().get_response_body_api(),
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Modify current user password')
|
||||
@log(menu='User', operate='Modify current user password',
|
||||
get_operation_object=lambda r, k: {'name': r.user.username},
|
||||
get_details=get_re_password_details)
|
||||
def post(self, request: Request):
|
||||
data = {'email': request.user.email}
|
||||
data.update(request.data)
|
||||
|
|
@ -134,7 +135,8 @@ class SendEmailToCurrentUserView(APIView):
|
|||
operation_id=_("Send email to current user"),
|
||||
responses=SendEmailSerializer().get_response_body_api(),
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Send email to current user')
|
||||
@log(menu='User', operate='Send email to current user',
|
||||
get_operation_object=lambda r, k: {'name': r.user.username})
|
||||
def post(self, request: Request):
|
||||
serializer_obj = SendEmailSerializer(data={'email': request.user.email, 'type': "reset_password"})
|
||||
if serializer_obj.is_valid(raise_exception=True):
|
||||
|
|
@ -150,7 +152,8 @@ class Logout(APIView):
|
|||
operation_id=_("Sign out"),
|
||||
responses=SendEmailSerializer().get_response_body_api(),
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Sign out')
|
||||
@log(menu='User', operate='Sign out',
|
||||
get_operation_object=lambda r, k: {'name': r.user.username})
|
||||
def post(self, request: Request):
|
||||
token_cache.delete(request.META.get('HTTP_AUTHORIZATION'))
|
||||
return result.success(True)
|
||||
|
|
@ -177,7 +180,8 @@ class Login(APIView):
|
|||
security=[],
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Log in', get_user=lambda r: {'user_name': r.data.get('username', None)},
|
||||
get_details=_get_details)
|
||||
get_details=_get_details,
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('username')})
|
||||
def post(self, request: Request):
|
||||
login_request = LoginSerializer(data=request.data)
|
||||
# 校验请求参数
|
||||
|
|
@ -197,7 +201,9 @@ class Register(APIView):
|
|||
responses=RegisterSerializer().get_response_body_api(),
|
||||
security=[],
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='User registration', get_user=lambda r: {'user_name': r.data.get('username', None)})
|
||||
@log(menu='User', operate='User registration',
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('username', None)},
|
||||
get_user=lambda r: {'user_name': r.data.get('username', None)})
|
||||
def post(self, request: Request):
|
||||
serializer_obj = RegisterSerializer(data=request.data)
|
||||
if serializer_obj.is_valid(raise_exception=True):
|
||||
|
|
@ -216,7 +222,9 @@ class RePasswordView(APIView):
|
|||
security=[],
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Change password',
|
||||
get_user=lambda r: {'user_name': None, 'email': r.data.get('email', None)})
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('email', None)},
|
||||
get_user=lambda r: {'user_name': None, 'email': r.data.get('email', None)},
|
||||
get_details=get_re_password_details)
|
||||
def post(self, request: Request):
|
||||
serializer_obj = RePasswordSerializer(data=request.data)
|
||||
return result.success(serializer_obj.reset_password())
|
||||
|
|
@ -233,6 +241,7 @@ class CheckCode(APIView):
|
|||
security=[],
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Check whether the verification code is correct',
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('email', None)},
|
||||
get_user=lambda r: {'user_name': None, 'email': r.data.get('email', None)})
|
||||
def post(self, request: Request):
|
||||
return result.success(CheckCodeSerializer(data=request.data).is_valid(raise_exception=True))
|
||||
|
|
@ -248,6 +257,7 @@ class SendEmail(APIView):
|
|||
security=[],
|
||||
tags=[_("User")])
|
||||
@log(menu='User', operate='Send email',
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('email', None)},
|
||||
get_user=lambda r: {'user_name': None, 'email': r.data.get('email', None)})
|
||||
def post(self, request: Request):
|
||||
serializer_obj = SendEmailSerializer(data=request.data)
|
||||
|
|
@ -269,7 +279,8 @@ class UserManage(APIView):
|
|||
[RoleConstants.ADMIN],
|
||||
[PermissionConstants.USER_READ],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='User', operate='Add user')
|
||||
@log(menu='User', operate='Add user',
|
||||
get_operation_object=lambda r, k: {'name': r.data.get('username', None)})
|
||||
def post(self, request: Request):
|
||||
return result.success(UserManageSerializer().save(request.data))
|
||||
|
||||
|
|
@ -287,7 +298,6 @@ class UserManage(APIView):
|
|||
[RoleConstants.ADMIN],
|
||||
[PermissionConstants.USER_READ],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='User', operate='Get user paginated list')
|
||||
def get(self, request: Request, current_page, page_size):
|
||||
d = UserManageSerializer.Query(
|
||||
data={'email_or_username': request.query_params.get('email_or_username', None),
|
||||
|
|
@ -308,7 +318,9 @@ class UserManage(APIView):
|
|||
[RoleConstants.ADMIN],
|
||||
[PermissionConstants.USER_READ],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='User', operate='Change password')
|
||||
@log(menu='User', operate='Change password',
|
||||
get_operation_object=lambda r, k: get_user_operation_object(k.get('user_id')),
|
||||
get_details=get_re_password_details)
|
||||
def put(self, request: Request, user_id):
|
||||
return result.success(
|
||||
UserManageSerializer.Operate(data={'id': user_id}).re_password(request.data, with_valid=True))
|
||||
|
|
@ -326,7 +338,8 @@ class UserManage(APIView):
|
|||
[RoleConstants.ADMIN],
|
||||
[PermissionConstants.USER_READ],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='User', operate='Delete user')
|
||||
@log(menu='User', operate='Delete user',
|
||||
get_operation_object=lambda r, k: get_user_operation_object(k.get('user_id')))
|
||||
def delete(self, request: Request, user_id):
|
||||
return result.success(UserManageSerializer.Operate(data={'id': user_id}).delete(with_valid=True))
|
||||
|
||||
|
|
@ -341,7 +354,6 @@ class UserManage(APIView):
|
|||
[RoleConstants.ADMIN],
|
||||
[PermissionConstants.USER_READ],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='User', operate='Get user information')
|
||||
def get(self, request: Request, user_id):
|
||||
return result.success(UserManageSerializer.Operate(data={'id': user_id}).one(with_valid=True))
|
||||
|
||||
|
|
@ -357,7 +369,8 @@ class UserManage(APIView):
|
|||
[RoleConstants.ADMIN],
|
||||
[PermissionConstants.USER_READ],
|
||||
compare=CompareConstants.AND))
|
||||
@log(menu='User', operate='Update user information')
|
||||
@log(menu='User', operate='Update user information',
|
||||
get_operation_object=lambda r, k: get_user_operation_object(k.get('user_id')))
|
||||
def put(self, request: Request, user_id):
|
||||
return result.success(
|
||||
UserManageSerializer.Operate(data={'id': user_id}).edit(request.data, with_valid=True))
|
||||
|
|
@ -372,6 +385,5 @@ class UserListView(APIView):
|
|||
responses=result.get_api_array_response(UserSerializer.Query.get_response_body_api()),
|
||||
tags=[_("User")])
|
||||
@has_permissions(PermissionConstants.USER_READ)
|
||||
@log(menu='User', operate='Get user list by type')
|
||||
def get(self, request: Request, type):
|
||||
return result.success(UserSerializer().listByType(type, request.user.id))
|
||||
|
|
|
|||
Loading…
Reference in New Issue