Source code for potoroo._uow

"""Contains the `UnitOfWork` abstract type."""

from __future__ import annotations

import abc
from types import TracebackType
from typing import Generic, Type, TypeVar

from ._repo import BasicRepo


R = TypeVar("R", bound=BasicRepo)
U = TypeVar("U", bound="UnitOfWork")


[docs] class UnitOfWork(Generic[R], abc.ABC): """Implements the 'Unit-of-Work' persistance pattern.""" @property @abc.abstractmethod def repo(self) -> R: """The Repo type this UoW is associated with.""" @abc.abstractmethod def __enter__(self: U) -> U: """Called before entering the UoW context manager.""" @abc.abstractmethod def __exit__( self, exc_type: Type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: """Called before leaving the UoW context manager."""
[docs] @abc.abstractmethod def commit(self) -> None: """Commits our changes to `self.repo`."""
[docs] @abc.abstractmethod def rollback(self) -> None: """Reverts our changes to `self.repo`."""