"""
Custom exceptions for ToDoWrite
This module defines custom exception classes for consistent error handling
throughout the ToDoWrite codebase.
"""
from __future__ import annotations
# Removed object import
[docs]
class ToDoWriteError(Exception):
"""Base exception class for all ToDoWrite errors."""
pass
[docs]
class ModelError(ToDoWriteError):
"""Base exception for ToDoWrite Models-related errors."""
pass
[docs]
class ModelNotFoundError(ModelError):
"""Raised when a model record is not found."""
[docs]
def __init__(self, model_name: str, record_id: int) -> None:
self.model_name = model_name
self.record_id = record_id
super().__init__(f"{model_name} not found: {record_id}")
[docs]
class InvalidModelError(ModelError):
"""Raised when model data is invalid."""
[docs]
def __init__(
self, message: str, details: dict[str, str | int | bool] | None = None
) -> None:
self.details = details or {}
super().__init__(message)
[docs]
class StorageError(ToDoWriteError):
"""Base exception for storage-related errors."""
pass
[docs]
class DatabaseError(StorageError):
"""Raised for database-related errors."""
[docs]
def __init__(
self, message: str, original_exception: Exception | None = None
) -> None:
self.original_exception = original_exception
super().__init__(f"Database error: {message}")
[docs]
class YAMLError(StorageError):
"""Raised for YAML-related errors."""
[docs]
def __init__(self, message: str, file_path: str | None = None) -> None:
self.file_path = file_path
msg = f"YAML error: {message}"
if file_path:
msg += f" (file: {file_path})"
super().__init__(msg)
[docs]
class SchemaError(ToDoWriteError):
"""Raised for schema validation errors."""
[docs]
def __init__(
self, message: str, validation_errors: list[str] | None = None
) -> None:
self.validation_errors = validation_errors or []
msg = f"Schema error: {message}"
if self.validation_errors:
msg += f" ({len(self.validation_errors)} errors)"
super().__init__(msg)
[docs]
class ConfigurationError(ToDoWriteError):
"""Raised for configuration-related errors."""
pass
[docs]
class CLIError(ToDoWriteError):
"""Raised for CLI-related errors."""
pass
[docs]
class TokenOptimizationError(ToDoWriteError):
"""Raised for token optimization errors."""
pass