Source code for mappyng.errors

from functools import wraps
from typing import Callable, Any, TypeVar

F = TypeVar('F', bound=Callable[..., Any])


[docs] class MapError(Exception): """Base exception for all mappyng-related errors.""" pass
[docs] class RenderError(MapError): """Raised when an error occurs during SVG rendering.""" pass
[docs] class CartoucheError(MapError): """Raised when an error occurs in cartouche/inset operations.""" pass
[docs] class DataError(MapError): """Raised for input data issues (missing columns, invalid CRS, bad geometry).""" pass
[docs] class LayoutError(MapError): """Raised for layout element errors (title, scale bar, legend, source).""" pass
[docs] def handle_map_errors(func: F) -> F: """Decorator that wraps map operations to provide consistent error context.""" @wraps(func) def wrapper(*args: Any, **kwargs: Any) -> Any: try: return func(*args, **kwargs) except (DataError, RenderError, CartoucheError, LayoutError) as e: raise type(e)(f"{type(e).__name__} in {func.__name__}: {str(e)}") except MapError: raise except Exception as e: raise MapError(f"Unexpected error in {func.__name__}: {str(e)}") return wrapper # type: ignore