|
1 | 1 | from django.utils.translation import gettext_lazy as _ |
2 | 2 | from drf_spectacular.utils import extend_schema |
| 3 | +from rest_framework.parsers import MultiPartParser |
3 | 4 | from rest_framework.request import Request |
4 | 5 | from rest_framework.views import APIView |
5 | 6 |
|
6 | 7 | from common.auth import TokenAuth |
7 | | -from common.auth.authentication import has_permissions, check_batch_permissions |
| 8 | +from common.auth.authentication import has_permissions, check_batch_permissions, get_is_permissions |
8 | 9 | from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants |
9 | 10 | from common.log.log import log |
10 | 11 | from common import result |
11 | 12 | from knowledge.api.knowledge import KnowledgeBaseCreateAPI, KnowledgeWebCreateAPI, KnowledgeTreeReadAPI, \ |
12 | 13 | KnowledgeEditAPI, KnowledgeReadAPI, KnowledgePageAPI, SyncWebAPI, GenerateRelatedAPI, HitTestAPI, EmbeddingAPI, \ |
13 | | - GetModelAPI, KnowledgeExportAPI, KnowledgeBatchOperateAPI |
| 14 | + GetModelAPI, KnowledgeExportAPI, KnowledgeBatchOperateAPI, KnowledgeImportAPI |
14 | 15 | from knowledge.models import KnowledgeScope |
15 | 16 | from knowledge.serializers.common import get_knowledge_operation_object |
16 | 17 | from knowledge.serializers.knowledge import KnowledgeSerializer, KnowledgeBatchOperateSerializer |
@@ -409,6 +410,68 @@ def get(self, request: Request, workspace_id: str, knowledge_id: str): |
409 | 410 | 'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id |
410 | 411 | }).export_zip() |
411 | 412 |
|
| 413 | + class ExportKnowledge(APIView): |
| 414 | + authentication_classes = [TokenAuth] |
| 415 | + |
| 416 | + @extend_schema( |
| 417 | + summary=_('Export knowledge bundle'), |
| 418 | + operation_id=_('Export knowledge bundle'), # type: ignore |
| 419 | + parameters=KnowledgeExportAPI.get_parameters(), |
| 420 | + responses=KnowledgeExportAPI.get_response(), |
| 421 | + tags=[_('Knowledge Base')] # type: ignore |
| 422 | + ) |
| 423 | + @has_permissions( |
| 424 | + PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_knowledge_permission(), |
| 425 | + PermissionConstants.KNOWLEDGE_EXPORT.get_workspace_permission_workspace_manage_role(), |
| 426 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
| 427 | + ViewPermission([RoleConstants.USER.get_workspace_role()], |
| 428 | + [PermissionConstants.KNOWLEDGE.get_workspace_knowledge_permission()], CompareConstants.AND), |
| 429 | + ) |
| 430 | + @log( |
| 431 | + menu='Knowledge Base', operate="Export knowledge bundle", |
| 432 | + get_operation_object=lambda r, keywords: get_knowledge_operation_object(keywords.get('knowledge_id')), |
| 433 | + ) |
| 434 | + def get(self, request: Request, workspace_id: str, knowledge_id: str): |
| 435 | + return KnowledgeSerializer.Operate(data={ |
| 436 | + 'workspace_id': workspace_id, 'knowledge_id': knowledge_id, 'user_id': request.user.id |
| 437 | + }).export_knowledge() |
| 438 | + |
| 439 | + |
| 440 | + class ImportKnowledge(APIView): |
| 441 | + authentication_classes = [TokenAuth] |
| 442 | + parser_classes = [MultiPartParser] |
| 443 | + |
| 444 | + @extend_schema( |
| 445 | + methods=['POST'], |
| 446 | + description=_('Import knowledge bundle'), |
| 447 | + summary=_('Import knowledge bundle'), |
| 448 | + operation_id=_('Import knowledge bundle'), |
| 449 | + parameters=KnowledgeImportAPI.get_parameters(), |
| 450 | + request=KnowledgeImportAPI.get_request(), |
| 451 | + responses=KnowledgeImportAPI.get_response(), |
| 452 | + tags=[_('Knowledge Base')] |
| 453 | + ) |
| 454 | + @has_permissions( |
| 455 | + PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission(), |
| 456 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
| 457 | + RoleConstants.USER.get_workspace_role() |
| 458 | + ) |
| 459 | + @log( |
| 460 | + menu='Knowledge Base', operate="Import knowledge bundle", |
| 461 | + ) |
| 462 | + def post(self, request: Request, workspace_id: str): |
| 463 | + is_import_tool = get_is_permissions(request, workspace_id=workspace_id)( |
| 464 | + PermissionConstants.TOOL_IMPORT.get_workspace_permission(), |
| 465 | + PermissionConstants.TOOL_IMPORT.get_workspace_permission_workspace_manage_role(), |
| 466 | + RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), RoleConstants.USER.get_workspace_role() |
| 467 | + ) |
| 468 | + return result.success( |
| 469 | + KnowledgeSerializer.ImportKnowledge( |
| 470 | + data={'workspace_id': workspace_id, 'user_id': request.user.id, 'folder_id': request.data.get('folder_id',workspace_id)} |
| 471 | + ).import_knowledge(request.FILES.get('file'), is_import_tool) |
| 472 | + ) |
| 473 | + |
| 474 | + |
412 | 475 | class GenerateRelated(APIView): |
413 | 476 | authentication_classes = [TokenAuth] |
414 | 477 |
|
|
0 commit comments