Source code for rizemind.exception.parse_exception

from collections.abc import Callable
from functools import wraps
from typing import ParamSpec, TypeVar

from pydantic_core import ValidationError as PydanticValidationError

from rizemind.exception.base_exception import RizemindException


[docs] class ParseException(RizemindException): """A Pydantic model parse error.""" ...
P = ParamSpec("P") R = TypeVar("R")
[docs] def catch_parse_errors(func: Callable[P, R]) -> Callable[P, R]: """Wrap a callable and convert common parse errors to `ParseException`. Args: func: The function to wrap. Returns: A callable that behaves like `func` but raises `ParseException` when a `KeyError` or Pydantic `ValidationError` occurs. Raises: ParseException: If a `KeyError` or Pydantic `ValidationError` is raised by the wrapped callable. """ @wraps(func) def _wrapper(*args: P.args, **kwargs: P.kwargs) -> R: try: return func(*args, **kwargs) except (KeyError, PydanticValidationError) as exc: raise ParseException(code="parse_error", message=str(exc)) from exc return _wrapper