Source code for todowrite.core.exceptions

"""
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