- #
- # Copyright 2024 The InfiniFlow Authors. All Rights Reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License
- #
-
- from api.db.services.file2document_service import File2DocumentService
- from api.db.services.file_service import FileService
-
- from flask import request
- from flask_login import login_required, current_user
- from api.db.services.knowledgebase_service import KnowledgebaseService
- from api.utils.api_utils import server_error_response, get_data_error_result, validate_request
- from api.utils import get_uuid
- from api.db import FileType
- from api.db.services.document_service import DocumentService
- from api import settings
- from api.utils.api_utils import get_json_result
-
-
- @manager.route('/convert', methods=['POST']) # noqa: F821
- @login_required
- @validate_request("file_ids", "kb_ids")
- def convert():
- req = request.json
- kb_ids = req["kb_ids"]
- file_ids = req["file_ids"]
- file2documents = []
-
- try:
- for file_id in file_ids:
- e, file = FileService.get_by_id(file_id)
- file_ids_list = [file_id]
- if file.type == FileType.FOLDER.value:
- file_ids_list = FileService.get_all_innermost_file_ids(file_id, [])
- for id in file_ids_list:
- informs = File2DocumentService.get_by_file_id(id)
- # delete
- for inform in informs:
- doc_id = inform.document_id
- e, doc = DocumentService.get_by_id(doc_id)
- if not e:
- return get_data_error_result(message="Document not found!")
- tenant_id = DocumentService.get_tenant_id(doc_id)
- if not tenant_id:
- return get_data_error_result(message="Tenant not found!")
- if not DocumentService.remove_document(doc, tenant_id):
- return get_data_error_result(
- message="Database error (Document removal)!")
- File2DocumentService.delete_by_file_id(id)
-
- # insert
- for kb_id in kb_ids:
- e, kb = KnowledgebaseService.get_by_id(kb_id)
- if not e:
- return get_data_error_result(
- message="Can't find this knowledgebase!")
- e, file = FileService.get_by_id(id)
- if not e:
- return get_data_error_result(
- message="Can't find this file!")
-
- doc = DocumentService.insert({
- "id": get_uuid(),
- "kb_id": kb.id,
- "parser_id": FileService.get_parser(file.type, file.name, kb.parser_id),
- "parser_config": kb.parser_config,
- "created_by": current_user.id,
- "type": file.type,
- "name": file.name,
- "location": file.location,
- "size": file.size
- })
- file2document = File2DocumentService.insert({
- "id": get_uuid(),
- "file_id": id,
- "document_id": doc.id,
- })
- file2documents.append(file2document.to_json())
- return get_json_result(data=file2documents)
- except Exception as e:
- return server_error_response(e)
-
-
- @manager.route('/rm', methods=['POST']) # noqa: F821
- @login_required
- @validate_request("file_ids")
- def rm():
- req = request.json
- file_ids = req["file_ids"]
- if not file_ids:
- return get_json_result(
- data=False, message='Lack of "Files ID"', code=settings.RetCode.ARGUMENT_ERROR)
- try:
- for file_id in file_ids:
- informs = File2DocumentService.get_by_file_id(file_id)
- if not informs:
- return get_data_error_result(message="Inform not found!")
- for inform in informs:
- if not inform:
- return get_data_error_result(message="Inform not found!")
- File2DocumentService.delete_by_file_id(file_id)
- doc_id = inform.document_id
- e, doc = DocumentService.get_by_id(doc_id)
- if not e:
- return get_data_error_result(message="Document not found!")
- tenant_id = DocumentService.get_tenant_id(doc_id)
- if not tenant_id:
- return get_data_error_result(message="Tenant not found!")
- if not DocumentService.remove_document(doc, tenant_id):
- return get_data_error_result(
- message="Database error (Document removal)!")
- return get_json_result(data=True)
- except Exception as e:
- return server_error_response(e)
|