From 67229339cb16a1f355e6aa05da9aa4c043aa4b71 Mon Sep 17 00:00:00 2001 From: GareArc Date: Wed, 10 Jun 2026 04:34:46 -0700 Subject: [PATCH] refactor(openapi): own FilenameNotExists error instead of touching the shared class controllers/common/errors.py is consumed by other controllers; keep it untouched and declare the openapi-surface error as an OpenApiError subclass. Wire output is identical. --- api/controllers/common/errors.py | 1 - api/controllers/openapi/_errors.py | 6 ++++++ api/controllers/openapi/files.py | 4 ++-- .../unit_tests/controllers/openapi/test_error_contract.py | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/api/controllers/common/errors.py b/api/controllers/common/errors.py index a8ab4d5bad..31dd2fcd74 100644 --- a/api/controllers/common/errors.py +++ b/api/controllers/common/errors.py @@ -4,7 +4,6 @@ from libs.exception import BaseHTTPException class FilenameNotExistsError(HTTPException): - error_code = "filename_not_exists" code = 400 description = "The specified filename does not exist." diff --git a/api/controllers/openapi/_errors.py b/api/controllers/openapi/_errors.py index c910b17623..38c068bd35 100644 --- a/api/controllers/openapi/_errors.py +++ b/api/controllers/openapi/_errors.py @@ -221,6 +221,12 @@ class OpenApiErrorFormatter: return isinstance(part, (str, int)) and not isinstance(part, bool) +class FilenameNotExists(OpenApiError): # noqa: N818 + code = 400 + error_code = OpenApiErrorCode.FILENAME_NOT_EXISTS + description = "The specified filename does not exist." + + class MemberLimitExceeded(OpenApiError): # noqa: N818 code = 403 error_code = OpenApiErrorCode.MEMBER_LIMIT_EXCEEDED diff --git a/api/controllers/openapi/files.py b/api/controllers/openapi/files.py index e77e4bc302..7326a4a922 100644 --- a/api/controllers/openapi/files.py +++ b/api/controllers/openapi/files.py @@ -10,7 +10,6 @@ from werkzeug.exceptions import BadRequest import services from controllers.common.errors import ( BlockedFileExtensionError, - FilenameNotExistsError, FileTooLargeError, NoFileUploadedError, TooManyFilesError, @@ -18,6 +17,7 @@ from controllers.common.errors import ( ) from controllers.openapi import openapi_ns from controllers.openapi._contract import returns +from controllers.openapi._errors import FilenameNotExists from controllers.openapi.auth.composition import auth_router from controllers.openapi.auth.data import AuthData from extensions.ext_database import db @@ -52,7 +52,7 @@ class AppFileUploadApi(Resource): if not file.mimetype: raise UnsupportedFileTypeError() if not file.filename: - raise FilenameNotExistsError() + raise FilenameNotExists() try: upload_file = FileService(db.engine).upload_file( diff --git a/api/tests/unit_tests/controllers/openapi/test_error_contract.py b/api/tests/unit_tests/controllers/openapi/test_error_contract.py index 7da539d264..0d5c223ef9 100644 --- a/api/tests/unit_tests/controllers/openapi/test_error_contract.py +++ b/api/tests/unit_tests/controllers/openapi/test_error_contract.py @@ -16,7 +16,6 @@ from werkzeug.exceptions import ( from controllers.common.errors import ( BlockedFileExtensionError, - FilenameNotExistsError, FileTooLargeError, NoFileUploadedError, TooManyFilesError, @@ -25,6 +24,7 @@ from controllers.common.errors import ( from controllers.openapi._errors import ( ErrorBody, ErrorDetail, + FilenameNotExists, MemberLicenseExceeded, MemberLimitExceeded, OpenApiError, @@ -316,7 +316,7 @@ ERROR_MATRIX = [ (UnsupportedFileTypeError(), 415, "unsupported_file_type"), (NoFileUploadedError(), 400, "no_file_uploaded"), (TooManyFilesError(), 400, "too_many_files"), - (FilenameNotExistsError(), 400, "filename_not_exists"), + (FilenameNotExists(), 400, "filename_not_exists"), (BlockedFileExtensionError(), 400, "file_extension_blocked"), (MemberLimitExceeded(), 403, "member_limit_exceeded"), (MemberLicenseExceeded(), 403, "member_license_exceeded"),