from __future__ import annotations from dataclasses import dataclass, field from fivetran.operations import OperationSink from state import CheckpointPolicy, ConnectorState @dataclass class CheckpointController: operations: OperationSink state: ConnectorState policy: CheckpointPolicy _pending_rows: bool = field(default=False, init=False) @property def has_pending_rows(self) -> bool: return self._pending_rows def record_row(self) -> None: self._pending_rows = True if self.policy.record_row(): self.checkpoint() def checkpoint(self) -> None: self.operations.checkpoint(state=self.state) self.policy.mark_checkpointed() self._pending_rows = False __all__ = ["CheckpointController"]