from collections.abc import Callable from functools import wraps from ows_text_campaigns.adapters.db import DB from ows_text_campaigns.container import container def transactional[R, **P](func: Callable[P, R]) -> Callable[P, R]: @wraps(func) def wrapper(*args: P.args, **kwargs: P.kwargs) -> R: db = container.resolve(DB) with db.transaction(): return func(*args, **kwargs) return wrapper