feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
"""Custom application exceptions."""
|
||||||
|
from fastapi import HTTPException, status
|
||||||
|
|
||||||
|
|
||||||
|
class AppException(HTTPException):
|
||||||
|
"""Base application exception."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
detail: str,
|
||||||
|
status_code: int = status.HTTP_400_BAD_REQUEST,
|
||||||
|
):
|
||||||
|
super().__init__(status_code=status_code, detail=detail)
|
||||||
|
|
||||||
|
|
||||||
|
class NotFoundError(AppException):
|
||||||
|
def __init__(self, resource: str, resource_id=None):
|
||||||
|
msg = f"{resource} not found"
|
||||||
|
if resource_id is not None:
|
||||||
|
msg = f"{resource} #{resource_id} not found"
|
||||||
|
super().__init__(msg, status.HTTP_404_NOT_FOUND)
|
||||||
|
|
||||||
|
|
||||||
|
class PermissionDeniedError(AppException):
|
||||||
|
def __init__(self, detail: str = "Permission denied"):
|
||||||
|
super().__init__(detail, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
|
||||||
|
class TenantMismatchError(AppException):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(
|
||||||
|
"Tenant mismatch: resource does not belong to your tenant",
|
||||||
|
status.HTTP_403_FORBIDDEN,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class WorkerOfflineError(AppException):
|
||||||
|
def __init__(self, worker_name: str):
|
||||||
|
super().__init__(
|
||||||
|
f"AI Worker '{worker_name}' is offline or misconfigured",
|
||||||
|
status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class BudgetExceededError(AppException):
|
||||||
|
def __init__(self, detail: str = "Budget limit exceeded"):
|
||||||
|
super().__init__(detail, status.HTTP_402_PAYMENT_REQUIRED)
|
||||||
|
|
||||||
|
|
||||||
|
class TaskNotExecutableError(AppException):
|
||||||
|
def __init__(self, detail: str = "Task cannot be executed in current state"):
|
||||||
|
super().__init__(detail, status.HTTP_409_CONFLICT)
|
||||||
Reference in New Issue
Block a user