Skip to content

reconciler

django_spire.contrib.sync.database.reconciler

logger = logging.getLogger(__name__) module-attribute

ReconciliationResult dataclass

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_clear_tombstones = field(default_factory=set) 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],
    local_tombstones: dict[str, int],
) -> ReconciliationResult:
    result = ReconciliationResult()

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

    self._classify_deletes(payload, local_records, result)

    return result