diff --git a/configforge/exceptions.py b/configforge/exceptions.py new file mode 100644 index 0000000..9ac4970 --- /dev/null +++ b/configforge/exceptions.py @@ -0,0 +1,42 @@ +"""Custom exceptions for ConfigForge.""" + +from typing import Any, Dict, Optional + + +class ConfigForgeError(Exception): + """Base exception for ConfigForge errors.""" + + def __init__(self, message: str, details: Optional[Dict[str, Any]] = None): + super().__init__(message) + self.message = message + self.details = details if details is not None else {} + + +class InvalidConfigFormatError(ConfigForgeError): + """Raised when a configuration file has an invalid format.""" + pass + + +class SchemaValidationError(ConfigForgeError): + """Raised when schema validation fails.""" + def __init__(self, message: str, path: str = "", line: Optional[int] = None, details: Optional[Dict[str, Any]] = None): + super().__init__(message, details) + self.path = path if path else "" + self.line = line + + +class ConversionError(ConfigForgeError): + """Raised when file format conversion fails.""" + pass + + +class FileOperationError(ConfigForgeError): + """Raised when file I/O operations fail.""" + def __init__(self, message: str, filepath: str = "", details: Optional[Dict[str, Any]] = None): + super().__init__(message, details) + self.filepath = filepath if filepath else "" + + +class SchemaGenerationError(ConfigForgeError): + """Raised when schema generation fails.""" + pass