From a9259917c6f688657cbd1ce4ec1bbb49cd283186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E6=B5=B7=E8=92=BC=E7=81=86?= Date: Thu, 27 Nov 2025 09:41:24 +0800 Subject: [PATCH] fix(files): replace hard coded status codes with constants (#11544) ### What problem does this PR solve? To solve the problem of error reporting caused by type errors when various types of exception returns are triggered ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- api/apps/sdk/files.py | 66 +++++++++++++++++++++---------------------- common/constants.py | 1 + 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/api/apps/sdk/files.py b/api/apps/sdk/files.py index 1682a0285..6377ea7c8 100644 --- a/api/apps/sdk/files.py +++ b/api/apps/sdk/files.py @@ -31,7 +31,7 @@ from api.db.services.file_service import FileService from api.utils.api_utils import get_json_result from api.utils.file_utils import filename_type from common import settings - +from common.constants import RetCode @manager.route('/file/upload', methods=['POST']) # noqa: F821 @token_required @@ -86,19 +86,19 @@ async def upload(tenant_id): pf_id = root_folder["id"] if 'file' not in files: - return get_json_result(data=False, message='No file part!', code=400) + return get_json_result(data=False, message='No file part!', code=RetCode.BAD_REQUEST) file_objs = files.getlist('file') for file_obj in file_objs: if file_obj.filename == '': - return get_json_result(data=False, message='No selected file!', code=400) + return get_json_result(data=False, message='No selected file!', code=RetCode.BAD_REQUEST) file_res = [] try: e, pf_folder = FileService.get_by_id(pf_id) if not e: - return get_json_result(data=False, message="Can't find this folder!", code=404) + return get_json_result(data=False, message="Can't find this folder!", code=RetCode.NOT_FOUND) for file_obj in file_objs: # Handle file path @@ -114,13 +114,13 @@ async def upload(tenant_id): if file_len != len_id_list: e, file = FileService.get_by_id(file_id_list[len_id_list - 1]) if not e: - return get_json_result(data=False, message="Folder not found!", code=404) + return get_json_result(data=False, message="Folder not found!", code=RetCode.NOT_FOUND) last_folder = FileService.create_folder(file, file_id_list[len_id_list - 1], file_obj_names, len_id_list) else: e, file = FileService.get_by_id(file_id_list[len_id_list - 2]) if not e: - return get_json_result(data=False, message="Folder not found!", code=404) + return get_json_result(data=False, message="Folder not found!", code=RetCode.NOT_FOUND) last_folder = FileService.create_folder(file, file_id_list[len_id_list - 2], file_obj_names, len_id_list) @@ -202,7 +202,7 @@ async def create(tenant_id): try: if not FileService.is_parent_folder_exist(pf_id): - return get_json_result(data=False, message="Parent Folder Doesn't Exist!", code=400) + return get_json_result(data=False, message="Parent Folder Doesn't Exist!", code=RetCode.BAD_REQUEST) if FileService.query(name=req["name"], parent_id=pf_id): return get_json_result(data=False, message="Duplicated folder name in the same folder.", code=409) @@ -306,13 +306,13 @@ def list_files(tenant_id): try: e, file = FileService.get_by_id(pf_id) if not e: - return get_json_result(message="Folder not found!", code=404) + return get_json_result(message="Folder not found!", code=RetCode.NOT_FOUND) files, total = FileService.get_by_pf_id(tenant_id, pf_id, page_number, items_per_page, orderby, desc, keywords) parent_folder = FileService.get_parent_folder(pf_id) if not parent_folder: - return get_json_result(message="File not found!", code=404) + return get_json_result(message="File not found!", code=RetCode.NOT_FOUND) return get_json_result(data={"total": total, "files": files, "parent_folder": parent_folder.to_json()}) except Exception as e: @@ -392,7 +392,7 @@ def get_parent_folder(): try: e, file = FileService.get_by_id(file_id) if not e: - return get_json_result(message="Folder not found!", code=404) + return get_json_result(message="Folder not found!", code=RetCode.NOT_FOUND) parent_folder = FileService.get_parent_folder(file_id) return get_json_result(data={"parent_folder": parent_folder.to_json()}) @@ -439,7 +439,7 @@ def get_all_parent_folders(tenant_id): try: e, file = FileService.get_by_id(file_id) if not e: - return get_json_result(message="Folder not found!", code=404) + return get_json_result(message="Folder not found!", code=RetCode.NOT_FOUND) parent_folders = FileService.get_all_parent_folders(file_id) parent_folders_res = [folder.to_json() for folder in parent_folders] @@ -487,34 +487,34 @@ async def rm(tenant_id): for file_id in file_ids: e, file = FileService.get_by_id(file_id) if not e: - return get_json_result(message="File or Folder not found!", code=404) + return get_json_result(message="File or Folder not found!", code=RetCode.NOT_FOUND) if not file.tenant_id: - return get_json_result(message="Tenant not found!", code=404) + return get_json_result(message="Tenant not found!", code=RetCode.NOT_FOUND) if file.type == FileType.FOLDER.value: file_id_list = FileService.get_all_innermost_file_ids(file_id, []) for inner_file_id in file_id_list: e, file = FileService.get_by_id(inner_file_id) if not e: - return get_json_result(message="File not found!", code=404) + return get_json_result(message="File not found!", code=RetCode.NOT_FOUND) settings.STORAGE_IMPL.rm(file.parent_id, file.location) FileService.delete_folder_by_pf_id(tenant_id, file_id) else: settings.STORAGE_IMPL.rm(file.parent_id, file.location) if not FileService.delete(file): - return get_json_result(message="Database error (File removal)!", code=500) + return get_json_result(message="Database error (File removal)!", code=RetCode.SERVER_ERROR) informs = File2DocumentService.get_by_file_id(file_id) for inform in informs: doc_id = inform.document_id e, doc = DocumentService.get_by_id(doc_id) if not e: - return get_json_result(message="Document not found!", code=404) + return get_json_result(message="Document not found!", code=RetCode.NOT_FOUND) tenant_id = DocumentService.get_tenant_id(doc_id) if not tenant_id: - return get_json_result(message="Tenant not found!", code=404) + return get_json_result(message="Tenant not found!", code=RetCode.NOT_FOUND) if not DocumentService.remove_document(doc, tenant_id): - return get_json_result(message="Database error (Document removal)!", code=500) + return get_json_result(message="Database error (Document removal)!", code=RetCode.SERVER_ERROR) File2DocumentService.delete_by_file_id(file_id) return get_json_result(data=True) @@ -560,23 +560,23 @@ async def rename(tenant_id): try: e, file = FileService.get_by_id(req["file_id"]) if not e: - return get_json_result(message="File not found!", code=404) + return get_json_result(message="File not found!", code=RetCode.NOT_FOUND) if file.type != FileType.FOLDER.value and pathlib.Path(req["name"].lower()).suffix != pathlib.Path( file.name.lower()).suffix: - return get_json_result(data=False, message="The extension of file can't be changed", code=400) + return get_json_result(data=False, message="The extension of file can't be changed", code=RetCode.BAD_REQUEST) for existing_file in FileService.query(name=req["name"], pf_id=file.parent_id): if existing_file.name == req["name"]: return get_json_result(data=False, message="Duplicated file name in the same folder.", code=409) if not FileService.update_by_id(req["file_id"], {"name": req["name"]}): - return get_json_result(message="Database error (File rename)!", code=500) + return get_json_result(message="Database error (File rename)!", code=RetCode.SERVER_ERROR) informs = File2DocumentService.get_by_file_id(req["file_id"]) if informs: if not DocumentService.update_by_id(informs[0].document_id, {"name": req["name"]}): - return get_json_result(message="Database error (Document rename)!", code=500) + return get_json_result(message="Database error (Document rename)!", code=RetCode.SERVER_ERROR) return get_json_result(data=True) except Exception as e: @@ -606,13 +606,13 @@ async def get(tenant_id, file_id): description: File stream schema: type: file - 404: + RetCode.NOT_FOUND: description: File not found """ try: e, file = FileService.get_by_id(file_id) if not e: - return get_json_result(message="Document not found!", code=404) + return get_json_result(message="Document not found!", code=RetCode.NOT_FOUND) blob = settings.STORAGE_IMPL.get(file.parent_id, file.location) if not blob: @@ -677,13 +677,13 @@ async def move(tenant_id): for file_id in file_ids: file = files_dict[file_id] if not file: - return get_json_result(message="File or Folder not found!", code=404) + return get_json_result(message="File or Folder not found!", code=RetCode.NOT_FOUND) if not file.tenant_id: - return get_json_result(message="Tenant not found!", code=404) + return get_json_result(message="Tenant not found!", code=RetCode.NOT_FOUND) fe, _ = FileService.get_by_id(parent_id) if not fe: - return get_json_result(message="Parent Folder not found!", code=404) + return get_json_result(message="Parent Folder not found!", code=RetCode.NOT_FOUND) FileService.move_file(file_ids, parent_id) return get_json_result(data=True) @@ -705,7 +705,7 @@ async def convert(tenant_id): for file_id in file_ids: file = files_set[file_id] if not file: - return get_json_result(message="File not found!", code=404) + return get_json_result(message="File not found!", code=RetCode.NOT_FOUND) file_ids_list = [file_id] if file.type == FileType.FOLDER.value: file_ids_list = FileService.get_all_innermost_file_ids(file_id, []) @@ -716,13 +716,13 @@ async def convert(tenant_id): doc_id = inform.document_id e, doc = DocumentService.get_by_id(doc_id) if not e: - return get_json_result(message="Document not found!", code=404) + return get_json_result(message="Document not found!", code=RetCode.NOT_FOUND) tenant_id = DocumentService.get_tenant_id(doc_id) if not tenant_id: - return get_json_result(message="Tenant not found!", code=404) + return get_json_result(message="Tenant not found!", code=RetCode.NOT_FOUND) if not DocumentService.remove_document(doc, tenant_id): return get_json_result( - message="Database error (Document removal)!", code=404) + message="Database error (Document removal)!", code=RetCode.NOT_FOUND) File2DocumentService.delete_by_file_id(id) # insert @@ -730,11 +730,11 @@ async def convert(tenant_id): e, kb = KnowledgebaseService.get_by_id(kb_id) if not e: return get_json_result( - message="Can't find this knowledgebase!", code=404) + message="Can't find this knowledgebase!", code=RetCode.NOT_FOUND) e, file = FileService.get_by_id(id) if not e: return get_json_result( - message="Can't find this file!", code=404) + message="Can't find this file!", code=RetCode.NOT_FOUND) doc = DocumentService.insert({ "id": get_uuid(), diff --git a/common/constants.py b/common/constants.py index a09832eed..574786d00 100644 --- a/common/constants.py +++ b/common/constants.py @@ -49,6 +49,7 @@ class RetCode(IntEnum, CustomEnum): RUNNING = 106 PERMISSION_ERROR = 108 AUTHENTICATION_ERROR = 109 + BAD_REQUEST = 400 UNAUTHORIZED = 401 SERVER_ERROR = 500 FORBIDDEN = 403