From f773792424928ed60b4020d92638bd5a5758218f Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Mon, 16 Jun 2025 16:31:28 +0800 Subject: [PATCH] refactor: log add workspace_id --- apps/application/views/application.py | 12 +-- apps/application/views/application_api_key.py | 6 +- apps/application/views/application_version.py | 2 +- apps/common/job/__init__.py | 17 ++++ apps/common/job/clean_chat_job.py | 81 +++++++++++++++++++ apps/common/job/clean_debug_file_job.py | 37 +++++++++ apps/common/log/log.py | 2 +- apps/folders/views/folder.py | 6 +- apps/knowledge/views/document.py | 38 ++++----- apps/knowledge/views/knowledge.py | 18 ++--- apps/knowledge/views/paragraph.py | 14 ++-- apps/knowledge/views/problem.py | 10 +-- apps/models_provider/views/model.py | 8 +- apps/system_manage/views/email_setting.py | 4 +- apps/tools/views/tool.py | 10 +-- 15 files changed, 200 insertions(+), 65 deletions(-) create mode 100644 apps/common/job/__init__.py create mode 100644 apps/common/job/clean_chat_job.py create mode 100644 apps/common/job/clean_debug_file_job.py diff --git a/apps/application/views/application.py b/apps/application/views/application.py index c25904da..828d67c4 100644 --- a/apps/application/views/application.py +++ b/apps/application/views/application.py @@ -50,7 +50,7 @@ class ApplicationAPI(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate='Create an application', get_operation_object=lambda r, k: {'name': r.data.get('name')}, - workspace_id=lambda r, k: k.get('workspace_id')) + ) def post(self, request: Request, workspace_id: str): return result.success( ApplicationSerializer(data={'workspace_id': workspace_id, 'user_id': request.user.id}).insert(request.data)) @@ -103,7 +103,7 @@ class ApplicationAPI(APIView): tags=[_('Application')] # type: ignore ) @has_permissions(PermissionConstants.APPLICATION_READ, RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) - @log(menu='Application', operate="Import Application", workspace_id=lambda r, k: k.get('workspace_id')) + @log(menu='Application', operate="Import Application", ) def post(self, request: Request, workspace_id: str): return result.success(ApplicationSerializer( data={'user_id': request.user.id, 'workspace_id': workspace_id, @@ -126,7 +126,7 @@ class ApplicationAPI(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate="Export Application", get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def post(self, request: Request, workspace_id: str, application_id: str): return ApplicationOperateSerializer( data={'application_id': application_id, @@ -148,7 +148,7 @@ class ApplicationAPI(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate='Deleting application', get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def delete(self, request: Request, workspace_id: str, application_id: str): return result.success(ApplicationOperateSerializer( @@ -169,7 +169,7 @@ class ApplicationAPI(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate="Modify the application", get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def put(self, request: Request, workspace_id: str, application_id: str): return result.success( ApplicationOperateSerializer( @@ -207,7 +207,7 @@ class ApplicationAPI(APIView): ) @log(menu='Application', operate='Publishing an application', get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, application_id: str): return result.success( diff --git a/apps/application/views/application_api_key.py b/apps/application/views/application_api_key.py index b3010b84..52990df3 100644 --- a/apps/application/views/application_api_key.py +++ b/apps/application/views/application_api_key.py @@ -38,7 +38,7 @@ class ApplicationKey(APIView): ) @log(menu='Application', operate="Add ApiKey", get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_API_KEY.get_workspace_application_permission(), RoleConstants.WORKSPACE_MANAGE.get_workspace_role() ) @@ -80,7 +80,7 @@ class ApplicationKey(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate="Modify application API_KEY", get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def put(self, request: Request, workspace_id: str, application_id: str, api_key_id: str): return result.success( ApplicationKeySerializer.Operate( @@ -102,7 +102,7 @@ class ApplicationKey(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate="Delete application API_KEY", get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def delete(self, request: Request, workspace_id: str, application_id: str, api_key_id: str): return result.success( ApplicationKeySerializer.Operate( diff --git a/apps/application/views/application_version.py b/apps/application/views/application_version.py index de10ccb6..e1a401e3 100644 --- a/apps/application/views/application_version.py +++ b/apps/application/views/application_version.py @@ -97,7 +97,7 @@ class ApplicationVersionView(APIView): RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) @log(menu='Application', operate="Modify application version information", get_operation_object=lambda r, k: get_application_operation_object(k.get('application_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def put(self, request: Request, workspace_id: str, application_id: str, work_flow_version_id: str): return result.success( ApplicationVersionSerializer.Operate( diff --git a/apps/common/job/__init__.py b/apps/common/job/__init__.py new file mode 100644 index 00000000..33581f35 --- /dev/null +++ b/apps/common/job/__init__.py @@ -0,0 +1,17 @@ +# coding=utf-8 +""" + @project: maxkb + @Author:虎 + @file: __init__.py + @date:2024/3/14 11:54 + @desc: +""" +#from .client_access_num_job import * +from .clean_chat_job import * +from .clean_debug_file_job import * + + +def run(): + #client_access_num_job.run() + clean_chat_job.run() + clean_debug_file_job.run() diff --git a/apps/common/job/clean_chat_job.py b/apps/common/job/clean_chat_job.py new file mode 100644 index 00000000..3c8ef5a8 --- /dev/null +++ b/apps/common/job/clean_chat_job.py @@ -0,0 +1,81 @@ +# coding=utf-8 + +import logging +import datetime + +from django.db import transaction +from django.utils import timezone +from apscheduler.schedulers.background import BackgroundScheduler +from django_apscheduler.jobstores import DjangoJobStore +from application.models import Application, Chat, ChatRecord +from django.db.models import Q, Max +from common.lock.impl.file_lock import FileLock + +from knowledge.models import File + +scheduler = BackgroundScheduler() +scheduler.add_jobstore(DjangoJobStore(), "default") +lock = FileLock() + + +def clean_chat_log_job(): + from django.utils.translation import gettext_lazy as _ + logging.getLogger("max_kb").info(_('start clean chat log')) + now = timezone.now() + + applications = Application.objects.all().values('id', 'clean_time') + cutoff_dates = { + app['id']: now - datetime.timedelta(days=app['clean_time'] or 180) + for app in applications + } + + query_conditions = Q() + for app_id, cutoff_date in cutoff_dates.items(): + query_conditions |= Q(chat__application_id=app_id, create_time__lt=cutoff_date) + batch_size = 500 + while True: + with transaction.atomic(): + chat_records = ChatRecord.objects.filter(query_conditions).select_related('chat').only('id', 'chat_id', + 'create_time')[ + :batch_size] + if not chat_records: + break + chat_record_ids = [record.id for record in chat_records] + chat_ids = {record.chat_id for record in chat_records} + + # 计算每个 chat_id 的最大 create_time + max_create_times = ChatRecord.objects.filter(id__in=chat_record_ids).values('chat_id').annotate( + max_create_time=Max('create_time')) + + # 收集需要删除的文件 + files_to_delete = [] + for record in chat_records: + max_create_time = next( + (item['max_create_time'] for item in max_create_times if item['chat_id'] == record.chat_id), None) + if max_create_time: + files_to_delete.extend( + File.objects.filter(meta__chat_id=str(record.chat_id), create_time__lt=max_create_time) + ) + # 删除 ChatRecord + deleted_count = ChatRecord.objects.filter(id__in=chat_record_ids).delete()[0] + + # 删除没有关联 ChatRecord 的 Chat + Chat.objects.filter(chatrecord__isnull=True, id__in=chat_ids).delete() + File.objects.filter(loid__in=[file.loid for file in files_to_delete]).delete() + + if deleted_count < batch_size: + break + + logging.getLogger("max_kb").info(_('end clean chat log')) + + +def run(): + if lock.try_lock('clean_chat_log_job', 30 * 30): + try: + scheduler.start() + existing_job = scheduler.get_job(job_id='clean_chat_log') + if existing_job is not None: + existing_job.remove() + scheduler.add_job(clean_chat_log_job, 'cron', hour='0', minute='5', id='clean_chat_log') + finally: + lock.un_lock('clean_chat_log_job') diff --git a/apps/common/job/clean_debug_file_job.py b/apps/common/job/clean_debug_file_job.py new file mode 100644 index 00000000..30c61e1f --- /dev/null +++ b/apps/common/job/clean_debug_file_job.py @@ -0,0 +1,37 @@ +# coding=utf-8 + +import logging +from datetime import timedelta + +from apscheduler.schedulers.background import BackgroundScheduler +from django.db.models import Q +from django.utils import timezone +from django_apscheduler.jobstores import DjangoJobStore + +from common.lock.impl.file_lock import FileLock +from knowledge.models import File + +scheduler = BackgroundScheduler() +scheduler.add_jobstore(DjangoJobStore(), "default") +lock = FileLock() + + +def clean_debug_file(): + from django.utils.translation import gettext_lazy as _ + logging.getLogger("max_kb").info(_('start clean debug file')) + two_hours_ago = timezone.now() - timedelta(hours=2) + # 删除对应的文件 + File.objects.filter(Q(create_time__lt=two_hours_ago) & Q(meta__debug=True)).delete() + logging.getLogger("max_kb").info(_('end clean debug file')) + + +def run(): + if lock.try_lock('clean_debug_file', 30 * 30): + try: + scheduler.start() + clean_debug_file_job = scheduler.get_job(job_id='clean_debug_file') + if clean_debug_file_job is not None: + clean_debug_file_job.remove() + scheduler.add_job(clean_debug_file, 'cron', hour='2', minute='0', second='0', id='clean_debug_file') + finally: + lock.un_lock('clean_debug_file') diff --git a/apps/common/log/log.py b/apps/common/log/log.py index 750be124..d83027c4 100644 --- a/apps/common/log/log.py +++ b/apps/common/log/log.py @@ -57,7 +57,7 @@ def _get_details(request): def _get_workspace_id(request, kwargs): - return kwargs.get('workspace_id', None) + return kwargs.get('workspace_id', 'None') def log(menu: str, operate, get_user=_get_user, get_ip_address=_get_ip_address, get_details=_get_details, diff --git a/apps/folders/views/folder.py b/apps/folders/views/folder.py index 4cde7c27..337ec6b8 100644 --- a/apps/folders/views/folder.py +++ b/apps/folders/views/folder.py @@ -44,7 +44,7 @@ class FolderView(APIView): @log( menu='folder', operate='Create folder', get_operation_object=lambda r, k: {'name': r.data.get('name')}, - workspace_id=lambda r, k: k.get('workspace_id') + ) def post(self, request: Request, workspace_id: str, source: str): return result.success(FolderSerializer.Create( @@ -93,7 +93,7 @@ class FolderView(APIView): @log( menu='folder', operate='Edit folder', get_operation_object=lambda r, k: get_folder_operation_object(k.get('folder_id'), k.get('source')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, source: str, folder_id: str): return result.success(FolderSerializer.Operate( @@ -136,7 +136,7 @@ class FolderView(APIView): @log( menu='folder', operate='Delete folder', get_operation_object=lambda r, k: get_folder_operation_object(k.get('folder_id'), k.get('source')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def delete(self, request: Request, workspace_id: str, source: str, folder_id: str): return result.success(FolderSerializer.Operate( diff --git a/apps/knowledge/views/document.py b/apps/knowledge/views/document.py index bc102521..8aa53dd1 100644 --- a/apps/knowledge/views/document.py +++ b/apps/knowledge/views/document.py @@ -40,7 +40,7 @@ class DocumentView(APIView): @log(menu='document', operate="Create document", get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), - {'name': r.data.get('name')}), workspace_id=lambda r, keywords: keywords.get('workspace_id')) + {'name': r.data.get('name')}), ) def post(self, request: Request, workspace_id: str, knowledge_id: str): return result.success( DocumentSerializers.Create( @@ -112,7 +112,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(DocumentSerializers.Operate(data={ @@ -136,7 +136,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): operate = DocumentSerializers.Operate(data={ @@ -217,7 +217,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data.get('id_list'))), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Batch( @@ -246,7 +246,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(DocumentSerializers.Sync( @@ -275,7 +275,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(DocumentSerializers.Operate( @@ -303,7 +303,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(DocumentSerializers.Operate( @@ -331,7 +331,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data.get('id_list')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Batch(data={ @@ -361,7 +361,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), {'name': f'[{",".join([document.get("name") for document in r.data])}]', - 'document_list': r.data}), workspace_id=lambda r, keywords: keywords.get('workspace_id') + 'document_list': r.data}), ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Batch( @@ -391,7 +391,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data.get('id_list'))), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Batch( @@ -421,7 +421,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data.get('id_list'))), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Batch( @@ -450,7 +450,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data.get('id_list')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success( @@ -481,7 +481,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data.get('document_id_list')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.BatchGenerateRelated( @@ -535,7 +535,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return DocumentSerializers.Operate(data={ @@ -561,7 +561,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def get(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return DocumentSerializers.Operate(data={ @@ -607,7 +607,7 @@ class DocumentView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object_batch(r.data) - ), workspace_id=lambda r, keywords: keywords.get('workspace_id') + ), ) def put(self, request: Request, workspace_id, knowledge_id: str, target_knowledge_id: str): return result.success(DocumentSerializers.Migrate( @@ -642,7 +642,7 @@ class WebDocumentView(APIView): get_knowledge_operation_object(keywords.get('knowledge_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", [])]}), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def post(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Create(data={ @@ -673,7 +673,7 @@ class QaDocumentView(APIView): get_knowledge_operation_object(keywords.get('knowledge_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")]}), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def post(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Create(data={ @@ -704,7 +704,7 @@ class TableDocumentView(APIView): get_knowledge_operation_object(keywords.get('knowledge_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")]}), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def post(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(DocumentSerializers.Create( diff --git a/apps/knowledge/views/knowledge.py b/apps/knowledge/views/knowledge.py index 17e29f60..2d621fc5 100644 --- a/apps/knowledge/views/knowledge.py +++ b/apps/knowledge/views/knowledge.py @@ -65,7 +65,7 @@ class KnowledgeView(APIView): @log( menu='Knowledge Base', operate="Modify knowledge base information", get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(KnowledgeSerializer.Operate( @@ -89,7 +89,7 @@ class KnowledgeView(APIView): @log( menu='Knowledge Base', operate="Delete knowledge base", get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def delete(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(KnowledgeSerializer.Operate( @@ -162,7 +162,7 @@ class KnowledgeView(APIView): @log( menu='Knowledge Base', operate="Synchronize the knowledge base of the website", get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(KnowledgeSerializer.SyncWeb( @@ -224,7 +224,7 @@ class KnowledgeView(APIView): @log( menu='Knowledge Base', operate='Re-vectorize', get_operation_object=lambda r, k: get_knowledge_operation_object(k.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(KnowledgeSerializer.Operate( @@ -248,7 +248,7 @@ class KnowledgeView(APIView): @log( menu='Knowledge Base', operate="Export knowledge base", get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def get(self, request: Request, workspace_id: str, knowledge_id: str): return KnowledgeSerializer.Operate(data={ @@ -272,7 +272,7 @@ class KnowledgeView(APIView): @log( menu='Knowledge Base', operate="Export knowledge base containing images", get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def get(self, request: Request, workspace_id: str, knowledge_id: str): return KnowledgeSerializer.Operate(data={ @@ -299,7 +299,7 @@ class KnowledgeView(APIView): @log( menu='document', operate='Generate related documents', get_operation_object=lambda r, k: get_knowledge_operation_object(k.get('knowledge_id')), - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(KnowledgeSerializer.Operate( @@ -375,7 +375,7 @@ class KnowledgeBaseView(APIView): @log( menu='knowledge Base', operate='Create base knowledge', get_operation_object=lambda r, k: {'name': r.data.get('name'), 'desc': r.data.get('desc')}, - workspace_id=lambda r, keywords: keywords.get('workspace_id') + ) def post(self, request: Request, workspace_id: str): return result.success(KnowledgeSerializer.Create( @@ -407,7 +407,7 @@ class KnowledgeWebView(APIView): 'meta': {'source_url': r.data.get('source_url'), 'selector': r.data.get('selector'), 'embedding_model_id': r.data.get('embedding_model_id')}} - , workspace_id=lambda r, keywords: keywords.get('workspace_id') + , ) def post(self, request: Request, workspace_id: str): return result.success(KnowledgeSerializer.Create( diff --git a/apps/knowledge/views/paragraph.py b/apps/knowledge/views/paragraph.py index b3fb6664..48456dd9 100644 --- a/apps/knowledge/views/paragraph.py +++ b/apps/knowledge/views/paragraph.py @@ -61,7 +61,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(ParagraphSerializers.Create( @@ -110,7 +110,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, target_knowledge_id: str, target_document_id): @@ -146,7 +146,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(ParagraphSerializers.Batch( @@ -175,7 +175,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): o = ParagraphSerializers.Operate( @@ -231,7 +231,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def delete(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): o = ParagraphSerializers.Operate( @@ -267,7 +267,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def post(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str, paragraph_id: str): return result.success(ParagraphSerializers.Problem( @@ -359,7 +359,7 @@ class ParagraphView(APIView): get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) - ), workspace_id=lambda r, k: k.get('workspace_id') + ), ) def put(self, request: Request, workspace_id: str, knowledge_id: str, document_id: str): return result.success(ParagraphSerializers.Association( diff --git a/apps/knowledge/views/problem.py b/apps/knowledge/views/problem.py index 8b0bd8a7..86d58a8d 100644 --- a/apps/knowledge/views/problem.py +++ b/apps/knowledge/views/problem.py @@ -59,7 +59,7 @@ class ProblemView(APIView): @log( menu='problem', operate='Create question', get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')) - , workspace_id=lambda r, k: k.get('workspace_id') + , ) def post(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(ProblemSerializers.Create( @@ -110,7 +110,7 @@ class ProblemView(APIView): @log( menu='problem', operate='Batch associated paragraphs', get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(ProblemSerializers.BatchOperate( @@ -137,7 +137,7 @@ class ProblemView(APIView): @log( menu='problem', operate='Batch deletion issues', get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str): return result.success(ProblemSerializers.BatchOperate( @@ -163,7 +163,7 @@ class ProblemView(APIView): @log( menu='problem', operate='Delete question', get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def delete(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): return result.success(ProblemSerializers.Operate( @@ -192,7 +192,7 @@ class ProblemView(APIView): @log( menu='problem', operate='Modify question', get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, knowledge_id: str, problem_id: str): return result.success(ProblemSerializers.Operate( diff --git a/apps/models_provider/views/model.py b/apps/models_provider/views/model.py index bccfffde..2c5fec60 100644 --- a/apps/models_provider/views/model.py +++ b/apps/models_provider/views/model.py @@ -67,7 +67,7 @@ class ModelSetting(APIView): @has_permissions(PermissionConstants.MODEL_CREATE.get_workspace_permission()) @log(menu='model', operate='Create model', get_operation_object=lambda r, k: {'name': r.date.get('name')}, - get_details=get_edit_model_details, workspace_id=lambda r, k: k.get('workspace_id') + get_details=get_edit_model_details, ) def post(self, request: Request, workspace_id: str): return result.success( @@ -114,7 +114,7 @@ class ModelSetting(APIView): @has_permissions(PermissionConstants.MODEL_EDIT.get_workspace_permission()) @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, workspace_id=lambda r, k: k.get('workspace_id') + get_details=get_edit_model_details, ) def put(self, request: Request, workspace_id, model_id: str): return result.success( @@ -131,7 +131,7 @@ class ModelSetting(APIView): @has_permissions(PermissionConstants.MODEL_DELETE.get_workspace_permission()) @log(menu='model', operate='Delete model', get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def delete(self, request: Request, workspace_id: str, model_id: str): return result.success( ModelSerializer.Operate(data={'id': model_id, 'user_id': request.user.id}).delete()) @@ -174,7 +174,7 @@ class ModelSetting(APIView): @has_permissions(PermissionConstants.MODEL_READ.get_workspace_permission()) @log(menu='model', operate='Save model parameter form', get_operation_object=lambda r, k: get_model_operation_object(k.get('model_id')), - workspace_id=lambda r, k: k.get('workspace_id')) + ) def put(self, request: Request, workspace_id: str, model_id: str): return result.success( ModelSerializer.ModelParams(data={'id': model_id}).save_model_params_form(request.data)) diff --git a/apps/system_manage/views/email_setting.py b/apps/system_manage/views/email_setting.py index 3a022999..ad11bd6b 100644 --- a/apps/system_manage/views/email_setting.py +++ b/apps/system_manage/views/email_setting.py @@ -55,7 +55,7 @@ class SystemSetting(APIView): responses=EmailSettingAPI.get_response(), tags=[_('Email Settings')]) # type: ignore @log(menu='Email settings', operate='Create or update email settings', - get_details=get_email_details, workspace_id='None') + get_details=get_email_details) @has_permissions(PermissionConstants.EMAIL_SETTING_EDIT) def put(self, request: Request): return result.success( @@ -72,7 +72,7 @@ class SystemSetting(APIView): ) @has_permissions(PermissionConstants.EMAIL_SETTING_EDIT) @log(menu='Email settings', operate='Test email settings', - get_details=get_email_details, workspace_id='None' + get_details=get_email_details ) def post(self, request: Request): return result.success( diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py index 752dcaae..9d94f31e 100644 --- a/apps/tools/views/tool.py +++ b/apps/tools/views/tool.py @@ -44,7 +44,7 @@ class ToolView(APIView): ) @log( menu="Tool", operate="Create tool", - get_operation_object=lambda r, k: r.data.get('name'), workspace_id=lambda r, k: k.get('workspace_id') + get_operation_object=lambda r, k: r.data.get('name'), ) def post(self, request: Request, workspace_id: str): return result.success(ToolSerializer.Create( @@ -110,7 +110,7 @@ class ToolView(APIView): @log( menu='Tool', operate='Update tool', get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def put(self, request: Request, workspace_id: str, tool_id: str): return result.success(ToolSerializer.Operate( @@ -152,7 +152,7 @@ class ToolView(APIView): @log( menu='Tool', operate="Delete tool", get_operation_object=lambda r, k: get_tool_operation_object(k.get('tool_id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def delete(self, request: Request, workspace_id: str, tool_id: str): return result.success(ToolSerializer.Operate( @@ -204,7 +204,7 @@ class ToolView(APIView): PermissionConstants.TOOL_IMPORT.get_workspace_permission(), RoleConstants.WORKSPACE_MANAGE.get_workspace_role() ) - @log(menu='Tool', operate='Import tool', workspace_id=lambda r, k: k.get('workspace_id')) + @log(menu='Tool', operate='Import tool', ) def post(self, request: Request, workspace_id: str): return result.success(ToolSerializer.Import( data={'workspace_id': workspace_id, 'file': request.FILES.get('file'), 'user_id': request.user.id} @@ -229,7 +229,7 @@ class ToolView(APIView): @log( menu='Tool', operate="Export function", get_operation_object=lambda r, k: get_tool_operation_object(k.get('id')), - workspace_id=lambda r, k: k.get('workspace_id') + ) def get(self, request: Request, tool_id: str, workspace_id: str): return ToolSerializer.Operate(