Source code for contree_sdk.session.commit_policy

"""Public policies for retaining successful, non-disposable operation results."""

from abc import ABC, abstractmethod

from contree_client.models import InstanceResult

from contree_sdk.execution import OperationContext
from contree_sdk.session.base import exit_code_of


[docs] class AbstractCommitPolicy(ABC): """Decide whether a validated operation result advances session history. Sessions call this synchronous method only after API success, for a non-disposable request. Implementations must not perform blocking I/O. A policy cannot accept API failure, cancellation, or a missing result image. """
[docs] @abstractmethod def should_commit(self, context: OperationContext, result: InstanceResult) -> bool: ...
[docs] class ApiSuccessCommitPolicy(AbstractCommitPolicy): """Retain every successful API result, including a nonzero or unknown exit code."""
[docs] def should_commit(self, context: OperationContext, result: InstanceResult) -> bool: # noqa: PLR6301 - policy contract return True
[docs] class ZeroExitCommitPolicy(AbstractCommitPolicy): """Retain a result only when its process exit code is explicitly zero."""
[docs] def should_commit(self, context: OperationContext, result: InstanceResult) -> bool: # noqa: PLR6301 - policy contract return exit_code_of(result) == 0