Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from typing import Any | |
| class AppError(Exception): | |
| message: str | |
| status_code: int = 400 | |
| code: str = "app_error" | |
| detail: dict[str, Any] = field(default_factory=dict) | |
| class BadRequestError(AppError): | |
| def __init__(self, message: str, detail: dict[str, Any] | None = None) -> None: | |
| super().__init__(message=message, status_code=400, code="bad_request", detail=detail or {}) | |
| class AuthenticationError(AppError): | |
| def __init__(self, message: str = "Authentication failed.") -> None: | |
| super().__init__(message=message, status_code=401, code="authentication_error") | |
| class AuthorizationError(AppError): | |
| def __init__(self, message: str = "You are not allowed to access this resource.") -> None: | |
| super().__init__(message=message, status_code=403, code="authorization_error") | |
| class ResourceNotFoundError(AppError): | |
| def __init__(self, resource_name: str, resource_id: str) -> None: | |
| super().__init__( | |
| message=f"{resource_name} '{resource_id}' was not found.", | |
| status_code=404, | |
| code="resource_not_found", | |
| detail={"resource_name": resource_name, "resource_id": resource_id}, | |
| ) | |
| class ConflictError(AppError): | |
| def __init__(self, message: str, detail: dict[str, Any] | None = None) -> None: | |
| super().__init__(message=message, status_code=409, code="conflict", detail=detail or {}) | |
| class RateLimitExceededError(AppError): | |
| def __init__(self, retry_after_seconds: int) -> None: | |
| super().__init__( | |
| message="Rate limit exceeded. Please retry later.", | |
| status_code=429, | |
| code="rate_limit_exceeded", | |
| detail={"retry_after_seconds": retry_after_seconds}, | |
| ) | |
| class ServiceUnavailableError(AppError): | |
| def __init__(self, message: str = "Service temporarily unavailable.") -> None: | |
| super().__init__(message=message, status_code=503, code="service_unavailable") | |
| class ModelInferenceError(AppError): | |
| def __init__(self, message: str = "Model inference failed.") -> None: | |
| super().__init__(message=message, status_code=500, code="model_inference_error") | |