from typing import Any, Dict from service.utils.appsync_communication.message_types import ServiceInfoError class ApiErrorHandler: params: Dict[str, Any] = {} def __init__(self, func, error_obj): self.default_error = ServiceInfoError self.func = func self.error_obj = error_obj def _deep_get(self, keys: list) -> dict: """Getting the results of a nested self.params dict""" _dict = self.params for key in keys: if isinstance(_dict, dict): _dict = _dict.get(key, dict()) else: return dict() return _dict def _digest_error(self, e): """ Working with self.params dictionary in order to identify and handle specific errors. """ raise RuntimeError(f"{self.__name__}._digest_error is not present") def __get__(self, instance, owner): def wrapper(*args, **kwargs): try: result = self.func(instance, *args, **kwargs) return result except self.error_obj as e: return self._digest_error(e) except Exception as e: raise e return wrapper