Files
NotesAgentic/backend/app/errors.py
T
admin 36bc1022f1 fix(backend): 修复全面审阅发现的核心问题
修复索引首次失败回滚、Vault 扫描边界、Markdown 代码围栏和 UTF-16 Citation 偏移。

收紧 Plugin 权限与 JSON Schema 校验,补齐 Note Move、Task、Attachment 和 Transcript Tool。

接入 OpenAI SSE 与 Ollama JSONL 真流式输出,修正 Provider PATCH 语义并限制运行时内存保留。

新增对应回归测试,后端测试增至 62 项。
2026-08-28 09:56:07 +08:00

60 lines
1.9 KiB
Python

from typing import Any
from fastapi import Request
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from starlette.exceptions import HTTPException as StarletteHttpException
from app.contracts import ErrorDetail, ErrorResponse
class ApiError(Exception):
def __init__(
self,
status_code: int,
code: str,
message: str,
details: dict[str, Any] | None = None,
) -> None:
super().__init__(message)
self.status_code = status_code
self.code = code
self.message = message
self.details = details or {}
async def api_error_handler(_: Request, exc: ApiError) -> JSONResponse:
body = ErrorResponse(
error=ErrorDetail(code=exc.code, message=exc.message, details=exc.details)
)
return JSONResponse(status_code=exc.status_code, content=jsonable_encoder(body))
async def validation_error_handler(_: Request, exc: RequestValidationError) -> JSONResponse:
body = ErrorResponse(
error=ErrorDetail(
code="VALIDATION_ERROR",
message="Request validation failed.",
details={"errors": exc.errors()},
)
)
return JSONResponse(status_code=422, content=jsonable_encoder(body))
async def http_error_handler(_: Request, exc: StarletteHttpException) -> JSONResponse:
code = "RESOURCE_NOT_FOUND" if exc.status_code == 404 else "HTTP_ERROR"
body = ErrorResponse(
error=ErrorDetail(code=code, message=str(exc.detail), details={})
)
return JSONResponse(status_code=exc.status_code, content=jsonable_encoder(body))
def not_implemented(resource: str) -> None:
raise ApiError(
status_code=501,
code="NOT_IMPLEMENTED",
message=f"{resource} contract is available, but its business service is not implemented.",
details={"resource": resource},
)