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