diff --git a/apps/application/views/application_version_views.py b/apps/application/views/application_version_views.py index f50d7cb04..020ffac98 100644 --- a/apps/application/views/application_version_views.py +++ b/apps/application/views/application_version_views.py @@ -16,6 +16,7 @@ from application.swagger_api.application_version_api import ApplicationVersionAp from common.auth import has_permissions, TokenAuth from common.constants.permission_constants import PermissionConstants, CompareConstants, ViewPermission, RoleConstants, \ Permission, Group, Operate +from common.log.log import log from common.response import result from django.utils.translation import gettext_lazy as _ @@ -30,6 +31,7 @@ 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( @@ -47,6 +49,7 @@ 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( @@ -64,6 +67,7 @@ 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( @@ -82,6 +86,7 @@ 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") def put(self, request: Request, application_id: str, work_flow_version_id: str): return result.success( ApplicationVersionSerializer.Operate( diff --git a/apps/application/views/application_views.py b/apps/application/views/application_views.py index bfac6b275..ab97de626 100644 --- a/apps/application/views/application_views.py +++ b/apps/application/views/application_views.py @@ -9,8 +9,9 @@ from django.core import cache from django.http import HttpResponse -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext_lazy as _, gettext from drf_yasg.utils import swagger_auto_schema +from langchain_core.prompts import PromptTemplate from rest_framework.decorators import action from rest_framework.parsers import MultiPartParser from rest_framework.request import Request @@ -50,6 +51,7 @@ 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, @@ -74,6 +76,7 @@ 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, @@ -99,6 +102,7 @@ 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, @@ -124,6 +128,7 @@ 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, @@ -153,6 +158,7 @@ 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") def put(self, request: Request, application_id: str): return result.success( ApplicationSerializer.IconOperate( @@ -169,6 +175,7 @@ class Application(APIView): tags=[_("Application")] ) @has_permissions(RoleConstants.ADMIN, RoleConstants.USER) + @log(menu='Application', operate="Import Application") def post(self, request: Request): return result.success(ApplicationSerializer.Import( data={'user_id': request.user.id, 'file': request.FILES.get('file')}).import_()) @@ -183,6 +190,7 @@ 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") def get(self, request: Request, application_id: str): return ApplicationSerializer.Operate( data={'application_id': application_id, 'user_id': request.user.id}).export() @@ -193,6 +201,7 @@ 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'), @@ -211,6 +220,7 @@ 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( @@ -229,6 +239,7 @@ 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( @@ -247,6 +258,7 @@ 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( @@ -266,6 +278,7 @@ 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( @@ -284,6 +297,7 @@ 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( @@ -303,6 +317,7 @@ 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( @@ -316,6 +331,7 @@ 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( @@ -336,6 +352,7 @@ 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") def post(self, request: Request, application_id: str): return result.success( ApplicationSerializer.ApplicationKeySerializer( @@ -352,6 +369,7 @@ 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()) @@ -371,6 +389,7 @@ 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") def put(self, request: Request, application_id: str, api_key_id: str): return result.success( ApplicationSerializer.ApplicationKeySerializer.Operate( @@ -388,6 +407,7 @@ 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") def delete(self, request: Request, application_id: str, api_key_id: str): return result.success( ApplicationSerializer.ApplicationKeySerializer.Operate( @@ -408,6 +428,7 @@ 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") def put(self, request: Request, application_id: str): return result.success( ApplicationSerializer.AccessTokenSerializer(data={'application_id': application_id}).edit( @@ -424,6 +445,7 @@ 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()) @@ -459,6 +481,7 @@ 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") def post(self, request: Request): return result.success(ApplicationSerializer.Create(data={'user_id': request.user.id}).insert(request.data)) @@ -469,6 +492,7 @@ 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( @@ -488,6 +512,7 @@ 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, @@ -513,6 +538,7 @@ 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") def put(self, request: Request, application_id: str): return result.success( ApplicationSerializer.Operate( @@ -534,6 +560,7 @@ 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") def delete(self, request: Request, application_id: str): return result.success(ApplicationSerializer.Operate( data={'application_id': application_id, 'user_id': request.user.id}).delete( @@ -551,6 +578,7 @@ 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") def put(self, request: Request, application_id: str): return result.success( ApplicationSerializer.Operate( @@ -569,6 +597,7 @@ 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()) @@ -589,6 +618,7 @@ 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()) @@ -604,7 +634,7 @@ 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")) + @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( @@ -622,6 +652,7 @@ class Application(APIView): dynamic_tag=keywords.get( 'application_id'))], compare=CompareConstants.AND)) + @log(menu='Application', operate="speech to text") def post(self, request: Request, application_id: str): return result.success( ApplicationSerializer.Operate(data={'application_id': application_id, 'user_id': request.user.id}) @@ -644,6 +675,7 @@ class Application(APIView): dynamic_tag=keywords.get( 'application_id'))], compare=CompareConstants.AND)) + @log(menu='Application', operate="text to speech") 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( @@ -662,6 +694,7 @@ class Application(APIView): dynamic_tag=keywords.get( 'application_id'))], compare=CompareConstants.AND)) + @log(menu='Application', operate="trial listening") 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) diff --git a/apps/application/views/chat_views.py b/apps/application/views/chat_views.py index e7c5ed032..4767268d7 100644 --- a/apps/application/views/chat_views.py +++ b/apps/application/views/chat_views.py @@ -23,6 +23,7 @@ from common.auth import TokenAuth, has_permissions, OpenAIKeyAuth from common.constants.authentication_type import AuthenticationType from common.constants.permission_constants import Permission, Group, Operate, \ RoleConstants, ViewPermission, CompareConstants +from common.log.log import log from common.response import result from common.util.common import query_params_to_single_dict from dataset.serializers.file_serializers import FileSerializer @@ -177,6 +178,7 @@ class ChatView(APIView): dynamic_tag=keywords.get('application_id'))], compare=CompareConstants.AND), compare=CompareConstants.AND) + @log(menu='Application/Conversation Log', operate="Delete a conversation") def delete(self, request: Request, application_id: str, chat_id: str): return result.success( ChatSerializers.Operate( @@ -199,6 +201,7 @@ 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( @@ -218,6 +221,7 @@ class ChatView(APIView): dynamic_tag=keywords.get('application_id'))], compare=CompareConstants.AND), compare=CompareConstants.AND) + @log(menu='Application/Conversation Log', operate="Client deletes conversation") def delete(self, request: Request, application_id: str, chat_id: str): return result.success( ChatSerializers.Operate( @@ -235,6 +239,7 @@ 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") def put(self, request: Request, application_id: str, chat_id: str): return result.success( ChatSerializers.Operate( @@ -256,6 +261,7 @@ 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, @@ -281,6 +287,7 @@ 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, @@ -299,6 +306,7 @@ 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, @@ -320,6 +328,7 @@ 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, @@ -343,6 +352,7 @@ 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") 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, @@ -363,6 +373,7 @@ 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()) @@ -390,6 +401,7 @@ class ChatView(APIView): 'dataset_id'))], compare=CompareConstants.AND ), compare=CompareConstants.AND) + @log(menu='Application/Conversation Log', operate="Annotation") 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( @@ -415,6 +427,7 @@ class ChatView(APIView): 'dataset_id'))], compare=CompareConstants.AND ), compare=CompareConstants.AND) + @log(menu='Application/Conversation Log', operate="Add to Knowledge Base") def post(self, request: Request, application_id: str, dataset_id: str): return result.success(ChatRecordSerializer.PostImprove().post_improve(request.data)) @@ -440,6 +453,7 @@ class ChatView(APIView): 'dataset_id'))], compare=CompareConstants.AND ), compare=CompareConstants.AND) + @log(menu='Application/Conversation Log', operate="Delete a Annotation") def delete(self, request: Request, application_id: str, chat_id: str, chat_record_id: str, dataset_id: str, document_id: str, paragraph_id: str): diff --git a/apps/common/log/log.py b/apps/common/log/log.py index a0f30fda3..eb462663a 100644 --- a/apps/common/log/log.py +++ b/apps/common/log/log.py @@ -75,6 +75,7 @@ def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address, return func(view, request, **kwargs) except Exception as e: status = 500 + raise e finally: ip = get_ip_address(request) user = get_user(request) diff --git a/apps/common/util/common.py b/apps/common/util/common.py index e67f1b8f1..2e8481c57 100644 --- a/apps/common/util/common.py +++ b/apps/common/util/common.py @@ -24,6 +24,26 @@ from ..exception.app_exception import AppApiException from ..models.db_model_manage import DBModelManage +def encryption(message: str): + """ + 加密敏感字段数据 加密方式是 如果密码是 1234567890 那么给前端则是 123******890 + :param message: + :return: + """ + max_pre_len = 8 + max_post_len = 4 + message_len = len(message) + pre_len = int(message_len / 5 * 2) + post_len = int(message_len / 5 * 1) + pre_str = "".join([message[index] for index in + range(0, max_pre_len if pre_len > max_pre_len else 1 if pre_len <= 0 else int(pre_len))]) + end_str = "".join( + [message[index] for index in + range(message_len - (int(post_len) if pre_len < max_post_len else max_post_len), message_len)]) + content = "***************" + return pre_str + content + end_str + + def sub_array(array: List, item_num=10): result = [] temp = [] diff --git a/apps/dataset/views/dataset.py b/apps/dataset/views/dataset.py index 3202cd35b..64dfb6375 100644 --- a/apps/dataset/views/dataset.py +++ b/apps/dataset/views/dataset.py @@ -32,8 +32,8 @@ class Dataset(APIView): authentication_classes = [TokenAuth] @action(methods=['PUT'], detail=False) - @swagger_auto_schema(operation_summary="同步Web站点知识库", - operation_id="同步Web站点知识库", + @swagger_auto_schema(operation_summary=_("Synchronize the knowledge base of the website"), + operation_id=_("Synchronize the knowledge base of the website"), manual_parameters=DataSetSerializers.SyncWeb.get_request_params_api(), responses=result.get_default_response(), tags=[_('Knowledge Base')]) @@ -43,7 +43,7 @@ class Dataset(APIView): dynamic_tag=keywords.get('dataset_id'))], compare=CompareConstants.AND), PermissionConstants.DATASET_EDIT, compare=CompareConstants.AND) - @log(menu=_('Knowledge Base'), operate=_("同步Web站点知识库")) + @log(menu='Knowledge Base', operate="Synchronize the knowledge base of the website") 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, @@ -54,15 +54,15 @@ class Dataset(APIView): parser_classes = [MultiPartParser] @action(methods=['POST'], detail=False) - @swagger_auto_schema(operation_summary="创建QA知识库", - operation_id="创建QA知识库", + @swagger_auto_schema(operation_summary=_("Create QA knowledge base"), + operation_id=_("Create QA knowledge base"), manual_parameters=DataSetSerializers.Create.CreateQASerializers.get_request_params_api(), responses=get_api_response( DataSetSerializers.Create.CreateQASerializers.get_response_body_api()), tags=[_('Knowledge Base')] ) @has_permissions(PermissionConstants.DATASET_CREATE, compare=CompareConstants.AND) - @log(menu=_('Knowledge Base'), operate=_("创建QA知识库")) + @log(menu='Knowledge Base', operate="Create QA knowledge base") 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 +82,7 @@ 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") def post(self, request: Request): return result.success(DataSetSerializers.Create(data={'user_id': request.user.id}).save_web(request.data)) @@ -96,7 +96,7 @@ 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")) + @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 +108,7 @@ 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")) + @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 +123,7 @@ 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") def post(self, request: Request): return result.success(DataSetSerializers.Create(data={'user_id': request.user.id}).save(request.data)) @@ -137,7 +137,7 @@ 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")) + @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 +158,7 @@ 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") 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 +173,7 @@ 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") def get(self, request: Request, dataset_id: str): return DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).export_excel() @@ -188,7 +188,7 @@ 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") def get(self, request: Request, dataset_id: str): return DataSetSerializers.Operate(data={'id': dataset_id, 'user_id': request.user.id}).export_zip() @@ -204,7 +204,7 @@ 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") def delete(self, request: Request, dataset_id: str): operate = DataSetSerializers.Operate(data={'id': dataset_id}) return result.success(operate.delete()) @@ -217,7 +217,7 @@ 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")) + @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 +232,7 @@ 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") 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 +250,7 @@ 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")) + @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 +268,7 @@ 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")) + @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( diff --git a/apps/dataset/views/document.py b/apps/dataset/views/document.py index 76706683b..c5d7b710f 100644 --- a/apps/dataset/views/document.py +++ b/apps/dataset/views/document.py @@ -32,7 +32,7 @@ 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")) + @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 +45,7 @@ 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")) + @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,7 @@ 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") 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 +82,7 @@ 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") def post(self, request: Request, dataset_id: str): return result.success( DocumentSerializers.Create(data={'dataset_id': dataset_id}).save_qa( @@ -103,7 +103,7 @@ 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") def post(self, request: Request, dataset_id: str): return result.success( DocumentSerializers.Create(data={'dataset_id': dataset_id}).save_table( @@ -124,7 +124,7 @@ 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") 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 +138,7 @@ 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")) + @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 +159,7 @@ 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") 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 +179,7 @@ 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") def post(self, request: Request, dataset_id: str): return result.success(DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_save(request.data)) @@ -194,7 +194,7 @@ 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") def put(self, request: Request, dataset_id: str): return result.success(DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_sync(request.data)) @@ -209,7 +209,7 @@ 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") def delete(self, request: Request, dataset_id: str): return result.success(DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_delete(request.data)) @@ -226,7 +226,7 @@ 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") 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 +246,7 @@ 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") 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 +267,7 @@ 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") def put(self, request: Request, dataset_id: str): return result.success( DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_cancel(request.data)) @@ -286,7 +286,7 @@ 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") 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 +307,7 @@ 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") def put(self, request: Request, dataset_id: str): return result.success( DocumentSerializers.Batch(data={'dataset_id': dataset_id}).batch_refresh(request.data)) @@ -330,7 +330,7 @@ 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") def put(self, request: Request, dataset_id: str, target_dataset_id: str): return result.success( DocumentSerializers.Migrate( @@ -350,7 +350,7 @@ 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") 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 +365,7 @@ 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") 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 +381,7 @@ 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")) + @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 +398,7 @@ 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") 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 +414,7 @@ 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") 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 +427,7 @@ 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")) + @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 +440,7 @@ 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")) + @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 +468,7 @@ 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")) + @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 +482,7 @@ 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") def put(self, request: Request, dataset_id: str): return result.success(DocumentSerializers.BatchGenerateRelated(data={'dataset_id': dataset_id}) .batch_generate_related(request.data)) diff --git a/apps/dataset/views/file.py b/apps/dataset/views/file.py index 62578c548..f2e1454bb 100644 --- a/apps/dataset/views/file.py +++ b/apps/dataset/views/file.py @@ -33,7 +33,7 @@ class FileView(APIView): required=True, description=_('Upload file'))], tags=[_('file')]) - @log(menu=_('file'), operate=_('Upload file')) + @log(menu='file', operate='Upload file') def post(self, request: Request): return result.success(FileSerializer(data={'file': request.FILES.get('file')}).upload()) diff --git a/apps/dataset/views/image.py b/apps/dataset/views/image.py index bb7452ca5..17b2a4639 100644 --- a/apps/dataset/views/image.py +++ b/apps/dataset/views/image.py @@ -33,7 +33,7 @@ class Image(APIView): required=True, description=_('Upload image'))], tags=[_('Image')]) - @log(menu=_('Image'), operate=_('Upload image')) + @log(menu='Image', operate='Upload image') def post(self, request: Request): return result.success(ImageSerializer(data={'image': request.FILES.get('file')}).upload()) @@ -42,6 +42,5 @@ class Image(APIView): @swagger_auto_schema(operation_summary=_('Get Image'), operation_id=_('Get Image'), tags=[_('Image')]) - @log(menu=_('Image'), operate=_('Get Image')) def get(self, request: Request, image_id: str): return ImageSerializer.Operate(data={'id': image_id}).get() diff --git a/apps/dataset/views/paragraph.py b/apps/dataset/views/paragraph.py index 0df73b076..3936c48eb 100644 --- a/apps/dataset/views/paragraph.py +++ b/apps/dataset/views/paragraph.py @@ -34,7 +34,7 @@ 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')) + @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 +52,7 @@ 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') 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 +70,7 @@ 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') 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 +86,7 @@ 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')) + @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 +104,7 @@ 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') 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 +122,7 @@ 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') 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 +141,7 @@ 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') 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 +157,7 @@ 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')) + @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 +173,7 @@ 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') 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 +194,7 @@ 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') 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 +217,7 @@ 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') 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 +239,7 @@ 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')) + @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 +254,7 @@ 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') 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}) diff --git a/apps/dataset/views/problem.py b/apps/dataset/views/problem.py index 741d88a43..9bc9c9b7f 100644 --- a/apps/dataset/views/problem.py +++ b/apps/dataset/views/problem.py @@ -34,7 +34,7 @@ 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')) + @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 +51,7 @@ 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') def post(self, request: Request, dataset_id: str): return result.success( ProblemSerializers.Create( @@ -69,7 +69,7 @@ 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')) + @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 +89,7 @@ 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') def delete(self, request: Request, dataset_id: str): return result.success( ProblemSerializers.BatchOperate(data={'dataset_id': dataset_id}).delete(request.data)) @@ -104,7 +104,7 @@ 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') def post(self, request: Request, dataset_id: str): return result.success( ProblemSerializers.BatchOperate(data={'dataset_id': dataset_id}).association(request.data)) @@ -121,7 +121,7 @@ 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') 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 +137,7 @@ 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') 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 +156,7 @@ 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')) + @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}) diff --git a/apps/function_lib/views/function_lib_views.py b/apps/function_lib/views/function_lib_views.py index 7519ec19b..3070357cc 100644 --- a/apps/function_lib/views/function_lib_views.py +++ b/apps/function_lib/views/function_lib_views.py @@ -30,7 +30,7 @@ class FunctionLibView(APIView): tags=[_('Function')], manual_parameters=FunctionLibApi.Query.get_request_params_api()) @has_permissions(RoleConstants.ADMIN, RoleConstants.USER) - @log(menu=_('Function'), operate=_("Get function list")) + @log(menu='Function', operate="Get function list") def get(self, request: Request): return result.success( FunctionLibSerializer.Query( @@ -45,7 +45,7 @@ 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") def post(self, request: Request): return result.success(FunctionLibSerializer.Create(data={'user_id': request.user.id}).insert(request.data)) @@ -58,7 +58,7 @@ 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")) + @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 +73,7 @@ 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") 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 +84,7 @@ 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") 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 +94,7 @@ class FunctionLibView(APIView): operation_id=_('Get function details'), tags=[_('Function')]) @has_permissions(RoleConstants.ADMIN, RoleConstants.USER) - @log(menu=_('Function'), operate=_("Get function details")) + @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 +110,7 @@ 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")) + @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( @@ -131,7 +131,7 @@ class FunctionLibView(APIView): tags=[_("function")] ) @has_permissions(RoleConstants.ADMIN, RoleConstants.USER) - @log(menu=_('Function'), operate=_("Import function")) + @log(menu='Function', operate="Import function") def post(self, request: Request): return result.success(FunctionLibSerializer.Import( data={'user_id': request.user.id, 'file': request.FILES.get('file')}).import_()) @@ -145,7 +145,7 @@ class FunctionLibView(APIView): tags=[_("function")] ) @has_permissions(RoleConstants.ADMIN, RoleConstants.USER) - @log(menu=_('Function'), operate=_("Export function")) + @log(menu='Function', operate="Export function") def get(self, request: Request, id: str): return FunctionLibSerializer.Operate( data={'id': id, 'user_id': request.user.id}).export() @@ -156,7 +156,7 @@ 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") def put(self, request: Request, id: str): return result.success( FunctionLibSerializer.IconOperate( @@ -168,7 +168,7 @@ 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") def post(self, request: Request, id: str): return result.success( FunctionLibSerializer.InternalFunction( diff --git a/apps/locales/en_US/LC_MESSAGES/django.po b/apps/locales/en_US/LC_MESSAGES/django.po index ef9686265..2cb72879f 100644 --- a/apps/locales/en_US/LC_MESSAGES/django.po +++ b/apps/locales/en_US/LC_MESSAGES/django.po @@ -6766,4 +6766,10 @@ msgid "The network is busy, try again later." msgstr "" msgid "Is it ascending order" +msgstr "" + +msgid "Create QA knowledge base" +msgstr "" + +msgid "Synchronize the knowledge base of the website" msgstr "" \ No newline at end of file diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po index d7602cb54..9236ff806 100644 --- a/apps/locales/zh_CN/LC_MESSAGES/django.po +++ b/apps/locales/zh_CN/LC_MESSAGES/django.po @@ -6905,4 +6905,10 @@ msgid "The network is busy, try again later." msgstr "网络繁忙,请稍后再试。" msgid "Is it ascending order" -msgstr "是否升序" \ No newline at end of file +msgstr "是否升序" + +msgid "Create QA knowledge base" +msgstr "创建QA知识库" + +msgid "Synchronize the knowledge base of the website" +msgstr "同步Web站点知识库" diff --git a/apps/locales/zh_Hant/LC_MESSAGES/django.po b/apps/locales/zh_Hant/LC_MESSAGES/django.po index beb0caf4f..6062b75ad 100644 --- a/apps/locales/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locales/zh_Hant/LC_MESSAGES/django.po @@ -6917,4 +6917,10 @@ msgid "The network is busy, try again later." msgstr "網絡繁忙,請稍後再試。" msgid "Is it ascending order" -msgstr "是否昇冪" \ No newline at end of file +msgstr "是否昇冪" + +msgid "Create QA knowledge base" +msgstr "創建QA知識庫" + +msgid "Synchronize the knowledge base of the website" +msgstr "同步Web網站知識庫" \ No newline at end of file diff --git a/apps/setting/models_provider/base_model_provider.py b/apps/setting/models_provider/base_model_provider.py index 556ecee20..dd1cdf1d5 100644 --- a/apps/setting/models_provider/base_model_provider.py +++ b/apps/setting/models_provider/base_model_provider.py @@ -16,6 +16,8 @@ from pydantic.v1 import BaseModel from common.exception.app_exception import AppApiException from django.utils.translation import gettext_lazy as _ +from common.util.common import encryption + class DownModelChunkStatus(Enum): success = "success" @@ -137,18 +139,7 @@ class BaseModelCredential(ABC): :param message: :return: """ - max_pre_len = 8 - max_post_len = 4 - message_len = len(message) - pre_len = int(message_len / 5 * 2) - post_len = int(message_len / 5 * 1) - pre_str = "".join([message[index] for index in - range(0, max_pre_len if pre_len > max_pre_len else 1 if pre_len <= 0 else int(pre_len))]) - end_str = "".join( - [message[index] for index in - range(message_len - (int(post_len) if pre_len < max_post_len else max_post_len), message_len)]) - content = "***************" - return pre_str + content + end_str + return encryption(message) class ModelTypeConst(Enum): diff --git a/apps/setting/views/Team.py b/apps/setting/views/Team.py index deab032ea..2913fd835 100644 --- a/apps/setting/views/Team.py +++ b/apps/setting/views/Team.py @@ -13,6 +13,7 @@ from rest_framework.views import Request from common.auth import TokenAuth, has_permissions from common.constants.permission_constants import PermissionConstants +from common.log.log import log from common.response import result from setting.serializers.team_serializers import TeamMemberSerializer, get_response_body_api, \ UpdateTeamMemberPermissionSerializer @@ -28,6 +29,7 @@ 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()) @@ -37,6 +39,7 @@ class TeamMember(APIView): request_body=TeamMemberSerializer().get_request_body_api(), tags=[_('team')]) @has_permissions(PermissionConstants.TEAM_CREATE) + @log(menu='team', operate='Add member') def post(self, request: Request): team = TeamMemberSerializer(data={'team_id': str(request.user.id)}) return result.success((team.add_member(**request.data))) @@ -50,6 +53,7 @@ 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') def post(self, request: Request): return result.success( TeamMemberSerializer(data={'team_id': request.user.id}).batch_add_member(request.data)) @@ -63,6 +67,7 @@ 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()) @@ -75,6 +80,7 @@ class TeamMember(APIView): tags=[_('team')] ) @has_permissions(PermissionConstants.TEAM_EDIT) + @log(menu='team', operate='Update team member permissions') 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)) @@ -86,6 +92,7 @@ class TeamMember(APIView): tags=[_('team')] ) @has_permissions(PermissionConstants.TEAM_DELETE) + @log(menu='team', operate='Remove member') 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()) diff --git a/apps/setting/views/model.py b/apps/setting/views/model.py index d57a453f5..242c9241a 100644 --- a/apps/setting/views/model.py +++ b/apps/setting/views/model.py @@ -13,10 +13,12 @@ from rest_framework.views import Request from common.auth import TokenAuth, has_permissions from common.constants.permission_constants import PermissionConstants +from common.log.log import log from common.response import result from common.util.common import query_params_to_single_dict from setting.models_provider.constants.model_provider_constants import ModelProvideConstants -from setting.serializers.provider_serializers import ProviderSerializer, ModelSerializer, get_default_model_params_setting +from setting.serializers.provider_serializers import ProviderSerializer, ModelSerializer, \ + get_default_model_params_setting from setting.swagger_api.provide_api import ProvideApi, ModelCreateApi, ModelQueryApi, ModelEditApi from django.utils.translation import gettext_lazy as _ @@ -30,6 +32,7 @@ class Model(APIView): request_body=ModelCreateApi.get_request_body_api() , tags=[_('model')]) @has_permissions(PermissionConstants.MODEL_CREATE) + @log(menu='model', operate='Create model') def post(self, request: Request): return result.success( ModelSerializer.Create(data={**request.data, 'user_id': str(request.user.id)}).insert(request.user.id, @@ -41,6 +44,7 @@ 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, @@ -52,6 +56,7 @@ 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( @@ -62,10 +67,14 @@ class Model(APIView): authentication_classes = [TokenAuth] @action(methods=['GET'], detail=False) - @swagger_auto_schema(operation_summary=_('Query model meta information, this interface does not carry authentication information'), - operation_id=_('Query model meta information, this interface does not carry authentication information'), - tags=[_('model')]) + @swagger_auto_schema(operation_summary=_( + 'Query model meta information, this interface does not carry authentication information'), + operation_id=_( + '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)) @@ -78,6 +87,8 @@ 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()) @@ -91,6 +102,7 @@ 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()) @@ -101,6 +113,7 @@ 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') def put(self, request: Request, model_id: str): return result.success( ModelSerializer.ModelParamsForm(data={'id': model_id, 'user_id': request.user.id}) @@ -115,6 +128,7 @@ class Model(APIView): request_body=ModelEditApi.get_request_body_api() , tags=[_('model')]) @has_permissions(PermissionConstants.MODEL_CREATE) + @log(menu='model', operate='Update model') 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, @@ -126,6 +140,7 @@ class Model(APIView): responses=result.get_default_response() , tags=[_('model')]) @has_permissions(PermissionConstants.MODEL_DELETE) + @log(menu='model', operate='Delete model') def delete(self, request: Request, model_id: str): return result.success( ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).delete()) @@ -134,6 +149,7 @@ 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( @@ -153,6 +169,7 @@ class Provide(APIView): request_body=ProvideApi.get_request_body_api() , tags=[_('model')]) @has_permissions(PermissionConstants.MODEL_READ) + @log(menu='model', operate='Call the supplier function to obtain form data') def post(self, request: Request, provider: str, method: str): return result.success( ProviderSerializer(data={'provider': provider, 'method': method}).exec(request.data, with_valid=True)) @@ -162,6 +179,7 @@ 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: @@ -185,6 +203,7 @@ 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()) @@ -200,6 +219,7 @@ 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') @@ -219,6 +239,7 @@ 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') @@ -235,6 +256,7 @@ 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') diff --git a/apps/setting/views/system_setting.py b/apps/setting/views/system_setting.py index fd2224677..5e8113a52 100644 --- a/apps/setting/views/system_setting.py +++ b/apps/setting/views/system_setting.py @@ -14,6 +14,7 @@ from rest_framework.views import APIView from common.auth import TokenAuth, has_permissions from common.constants.permission_constants import RoleConstants +from common.log.log import log from common.response import result from setting.serializers.system_setting import SystemSettingSerializer from setting.swagger_api.system_setting import SystemSettingEmailApi @@ -30,6 +31,7 @@ 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') def put(self, request: Request): return result.success( SystemSettingSerializer.EmailSerializer.Create( @@ -42,6 +44,7 @@ class SystemSetting(APIView): responses=result.get_default_response(), tags=[_('Email settings')]) @has_permissions(RoleConstants.ADMIN) + @log(menu='Email settings', operate='Test email settings') def post(self, request: Request): return result.success( SystemSettingSerializer.EmailSerializer.Create( @@ -53,6 +56,7 @@ 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()) diff --git a/apps/users/views/user.py b/apps/users/views/user.py index 21b429523..22969ce60 100644 --- a/apps/users/views/user.py +++ b/apps/users/views/user.py @@ -18,7 +18,9 @@ from rest_framework.views import Request from common.auth.authenticate import TokenAuth from common.auth.authentication import has_permissions from common.constants.permission_constants import PermissionConstants, CompareConstants, ViewPermission, RoleConstants +from common.log.log import log from common.response import result +from common.util.common import encryption from smartdoc.settings import JWT_AUTH from users.serializers.user_serializers import RegisterSerializer, LoginSerializer, CheckCodeSerializer, \ RePasswordSerializer, \ @@ -36,6 +38,7 @@ 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()) @@ -49,6 +52,7 @@ 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)) @@ -62,6 +66,7 @@ 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()) @@ -83,6 +88,7 @@ class SwitchUserLanguageView(APIView): ), responses=RePasswordSerializer().get_response_body_api(), tags=[_("User")]) + @log(menu='User', operate='Switch Language') def post(self, request: Request): data = {**request.data, 'user_id': request.user.id} return result.success(SwitchLanguageSerializer(data=data).switch()) @@ -108,6 +114,7 @@ class ResetCurrentUserPasswordView(APIView): ), responses=RePasswordSerializer().get_response_body_api(), tags=[_("User")]) + @log(menu='User', operate='Modify current user password') def post(self, request: Request): data = {'email': request.user.email} data.update(request.data) @@ -127,6 +134,7 @@ 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') def post(self, request: Request): serializer_obj = SendEmailSerializer(data={'email': request.user.email, 'type': "reset_password"}) if serializer_obj.is_valid(raise_exception=True): @@ -142,11 +150,23 @@ class Logout(APIView): operation_id=_("Sign out"), responses=SendEmailSerializer().get_response_body_api(), tags=[_("User")]) + @log(menu='User', operate='Sign out') def post(self, request: Request): token_cache.delete(request.META.get('HTTP_AUTHORIZATION')) return result.success(True) +def _get_details(request): + path = request.path + body = request.data + query = request.query_params + return { + 'path': path, + 'body': {**body, 'password': encryption(body.get('password', ''))}, + 'query': query + } + + class Login(APIView): @action(methods=['POST'], detail=False) @@ -156,6 +176,8 @@ class Login(APIView): responses=LoginSerializer().get_response_body_api(), security=[], tags=[_("User")]) + @log(menu='User', operate='Log in', get_user=lambda r: {'user_name': r.data.get('username', None)}, + get_details=_get_details) def post(self, request: Request): login_request = LoginSerializer(data=request.data) # 校验请求参数 @@ -175,6 +197,7 @@ 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)}) def post(self, request: Request): serializer_obj = RegisterSerializer(data=request.data) if serializer_obj.is_valid(raise_exception=True): @@ -192,6 +215,8 @@ class RePasswordView(APIView): responses=RePasswordSerializer().get_response_body_api(), security=[], tags=[_("User")]) + @log(menu='User', operate='Change password', + get_user=lambda r: {'user_name': None, 'email': r.data.get('email', None)}) def post(self, request: Request): serializer_obj = RePasswordSerializer(data=request.data) return result.success(serializer_obj.reset_password()) @@ -207,6 +232,8 @@ class CheckCode(APIView): responses=CheckCodeSerializer().get_response_body_api(), security=[], tags=[_("User")]) + @log(menu='User', operate='Check whether the verification code is correct', + 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)) @@ -220,6 +247,8 @@ class SendEmail(APIView): responses=SendEmailSerializer().get_response_body_api(), security=[], tags=[_("User")]) + @log(menu='User', operate='Send email', + get_user=lambda r: {'user_name': None, 'email': r.data.get('email', None)}) def post(self, request: Request): serializer_obj = SendEmailSerializer(data=request.data) if serializer_obj.is_valid(raise_exception=True): @@ -240,6 +269,7 @@ class UserManage(APIView): [RoleConstants.ADMIN], [PermissionConstants.USER_READ], compare=CompareConstants.AND)) + @log(menu='User', operate='Add user') def post(self, request: Request): return result.success(UserManageSerializer().save(request.data)) @@ -257,6 +287,7 @@ 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), @@ -277,6 +308,7 @@ class UserManage(APIView): [RoleConstants.ADMIN], [PermissionConstants.USER_READ], compare=CompareConstants.AND)) + @log(menu='User', operate='Change password') def put(self, request: Request, user_id): return result.success( UserManageSerializer.Operate(data={'id': user_id}).re_password(request.data, with_valid=True)) @@ -294,6 +326,7 @@ class UserManage(APIView): [RoleConstants.ADMIN], [PermissionConstants.USER_READ], compare=CompareConstants.AND)) + @log(menu='User', operate='Delete user') def delete(self, request: Request, user_id): return result.success(UserManageSerializer.Operate(data={'id': user_id}).delete(with_valid=True)) @@ -308,6 +341,7 @@ 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)) @@ -323,6 +357,7 @@ class UserManage(APIView): [RoleConstants.ADMIN], [PermissionConstants.USER_READ], compare=CompareConstants.AND)) + @log(menu='User', operate='Update user information') def put(self, request: Request, user_id): return result.success( UserManageSerializer.Operate(data={'id': user_id}).edit(request.data, with_valid=True)) @@ -337,5 +372,6 @@ 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))