ShreyasGosavi's picture
Upload 37 files
53bec59 verified
"""
Custom Exception Classes for Production Error Handling
"""
from typing import Any, Dict, Optional
from fastapi import status
class AppException(Exception):
"""Base application exception"""
def __init__(
self,
message: str,
status_code: int = status.HTTP_500_INTERNAL_SERVER_ERROR,
details: Optional[Dict[str, Any]] = None
):
self.message = message
self.status_code = status_code
self.details = details or {}
super().__init__(self.message)
class ValidationError(AppException):
"""Validation error exception"""
def __init__(self, message: str, details: Optional[Dict[str, Any]] = None):
super().__init__(
message=message,
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
details=details
)
class AuthenticationError(AppException):
"""Authentication error exception"""
def __init__(self, message: str = "Authentication failed"):
super().__init__(
message=message,
status_code=status.HTTP_401_UNAUTHORIZED,
details={"www_authenticate": "Bearer"}
)
class AuthorizationError(AppException):
"""Authorization error exception"""
def __init__(self, message: str = "Insufficient permissions"):
super().__init__(
message=message,
status_code=status.HTTP_403_FORBIDDEN
)
class ResourceNotFoundError(AppException):
"""Resource not found exception"""
def __init__(self, resource: str, identifier: Any):
super().__init__(
message=f"{resource} not found",
status_code=status.HTTP_404_NOT_FOUND,
details={"resource": resource, "identifier": str(identifier)}
)
class RateLimitExceededError(AppException):
"""Rate limit exceeded exception"""
def __init__(self, limit: int, window: str):
super().__init__(
message=f"Rate limit exceeded: {limit} requests per {window}",
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
details={"limit": limit, "window": window}
)
class ModelLoadError(AppException):
"""ML model loading error"""
def __init__(self, model_name: str, reason: str):
super().__init__(
message=f"Failed to load model: {model_name}",
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
details={"model": model_name, "reason": reason}
)
class PredictionError(AppException):
"""ML prediction error"""
def __init__(self, message: str, details: Optional[Dict[str, Any]] = None):
super().__init__(
message=message,
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
details=details
)
class FileUploadError(AppException):
"""File upload error"""
def __init__(self, message: str, details: Optional[Dict[str, Any]] = None):
super().__init__(
message=message,
status_code=status.HTTP_400_BAD_REQUEST,
details=details
)
class DatabaseError(AppException):
"""Database operation error"""
def __init__(self, message: str, details: Optional[Dict[str, Any]] = None):
super().__init__(
message=message,
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
details=details
)
class CacheError(AppException):
"""Cache operation error"""
def __init__(self, message: str, details: Optional[Dict[str, Any]] = None):
super().__init__(
message=message,
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
details=details
)