Skip to content

reconciler

django_spire.contrib.sync.database.reconciler

logger = logging.getLogger(__name__) module-attribute

ReconciliationResult dataclass

applied_keys = field(default_factory=set) class-attribute instance-attribute

compatible_keys = field(default_factory=list) class-attribute instance-attribute

conflict_keys = field(default_factory=list) class-attribute instance-attribute

conflict_log = field(default_factory=list) class-attribute instance-attribute

created_keys = field(default_factory=set) class-attribute instance-attribute

errors = field(default_factory=list) class-attribute instance-attribute

response_records = field(default_factory=dict) class-attribute instance-attribute

to_delete = field(default_factory=dict) class-attribute instance-attribute

to_upsert = field(default_factory=dict) class-attribute instance-attribute

PayloadReconciler

Source code in django_spire/contrib/sync/database/reconciler.py
def __init__(
    self,
    resolver: ConflictResolver | None = None,
) -> None:
    self._resolver = resolver or FieldTimestampWins()

reconcile

Source code in django_spire/contrib/sync/database/reconciler.py
def reconcile(
    self,
    payload: ModelPayload,
    local_records: dict[str, SyncRecord],
    checkpoint: int,
) -> ReconciliationResult:
    if checkpoint < 0:
        message = (
            f'checkpoint must be non-negative, '
            f'got {checkpoint}'
        )

        raise InvalidParameterError(message)

    result = ReconciliationResult()

    for key, remote in payload.records.items():
        self._classify_record(
            key,
            remote,
            payload.model_label,
            local_records,
            checkpoint,
            result,
        )

    self._classify_deletes(payload, local_records, result)

    return result