BakoAI / app /core /__init__.py
Okidi Norbert
Deployment fix: clean backend only
c6abe34
"""
Custom exceptions for the Basketball Analysis API.
"""
from typing import Optional, Dict, Any
class BasketballAPIException(Exception):
"""Base exception for all API errors."""
def __init__(
self,
message: str,
status_code: int = 500,
details: Optional[Dict[str, Any]] = None
):
self.message = message
self.status_code = status_code
self.details = details or {}
super().__init__(self.message)
class AuthenticationError(BasketballAPIException):
"""Raised when authentication fails."""
def __init__(self, message: str = "Authentication failed", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=401, details=details)
class AuthorizationError(BasketballAPIException):
"""Raised when user lacks permission for an action."""
def __init__(self, message: str = "Access denied", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=403, details=details)
class NotFoundError(BasketballAPIException):
"""Raised when a resource is not found."""
def __init__(self, resource: str = "Resource", resource_id: Optional[str] = None):
message = f"{resource} not found"
if resource_id:
message = f"{resource} with id '{resource_id}' not found"
super().__init__(message, status_code=404)
class ValidationError(BasketballAPIException):
"""Raised when request validation fails."""
def __init__(self, message: str = "Validation error", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=422, details=details)
class VideoProcessingError(BasketballAPIException):
"""Raised when video processing fails."""
def __init__(self, message: str = "Video processing failed", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=500, details=details)
class StorageError(BasketballAPIException):
"""Raised when file storage operations fail."""
def __init__(self, message: str = "Storage operation failed", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=500, details=details)
class SupabaseError(BasketballAPIException):
"""Raised when Supabase operations fail."""
def __init__(self, message: str = "Database operation failed", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=500, details=details)
class AnalysisError(BasketballAPIException):
"""Raised when video analysis fails."""
def __init__(self, message: str = "Analysis failed", details: Optional[Dict[str, Any]] = None):
super().__init__(message, status_code=500, details=details)