28 lines
1.1 KiB
Python
28 lines
1.1 KiB
Python
from typing import Any, Callable, Optional
|
|
from sqlalchemy.exc import IntegrityError, OperationalError, NoResultFound
|
|
from pydantic import ValidationError
|
|
|
|
from kawai_focus.main import Logger
|
|
from kawai_focus.utils.errors import ErrorMessage
|
|
|
|
|
|
def crud_error_guard(func: Callable[..., Any]) -> Callable[..., Optional[Any]] | None:
|
|
"""Декоратор для обработки ошибок CRUD"""
|
|
|
|
def wrapper(*args: Any, **kwargs: Any) -> Optional[Any] | None:
|
|
|
|
try:
|
|
result = func(*args, **kwargs)
|
|
return result
|
|
except ConnectionError as err:
|
|
Logger.error(f'{ErrorMessage.CONNECTION_ERROR.value}: {err}')
|
|
except IntegrityError as err:
|
|
Logger.error(f'{ErrorMessage.INTEGRITY_ERROR.value}: {err}')
|
|
except OperationalError as err:
|
|
Logger.error(f'{ErrorMessage.OPERATIONAL_ERROR.value}: {err}')
|
|
except ValidationError as err:
|
|
Logger.error(f'{ErrorMessage.VALIDATION_ERROR.value}: {err}')
|
|
except NoResultFound as err:
|
|
Logger.error(f'{ErrorMessage.NO_RESULT_FOUND.value}: {err}')
|
|
return wrapper
|