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