Skip to content

server

django_spire.contrib.sync.django.server

SyncServer

Source code in django_spire/contrib/sync/django/server.py
def __init__(
    self,
    models: list[type[SyncableMixin]],
    node_id: str,
    *,
    batch_bytes: int | None = BATCH_BYTES_DEFAULT,
    batch_size: int | None = None,
    clock: HybridLogicalClock | None = None,
    clock_drift_max: int | None = 300,
    graph: DependencyGraph | None = None,
    lock: SyncLock | None = None,
    on_complete: Callable[[DatabaseResult], None] | None = None,
    on_phase: Callable[[SyncPhase], None] | None = None,
    payload_bytes_max: int | None = None,
    payload_records_max: int | None = None,
    progress: Callable[[SyncStage, int, int], None] | None = None,
    resolver: ConflictResolver | None = None,
    storage: DatabaseSyncStorage | None = None,
    transaction_fn: Callable[[], AbstractContextManager[Any]] = transaction.atomic,
) -> None:
    self._engine = DatabaseEngine(
        batch_bytes=batch_bytes,
        batch_size=batch_size,
        clock=clock or SyncableMixin.get_clock(),
        clock_drift_max=clock_drift_max,
        graph=graph or build_graph(models),
        lock=lock or DjangoSyncLock(),
        node_id=node_id,
        on_complete=on_complete,
        on_phase=on_phase,
        payload_bytes_max=payload_bytes_max,
        payload_records_max=payload_records_max,
        progress=progress,
        reconciler=PayloadReconciler(
            resolver=resolver or FieldTimestampWins(),
        ),
        storage=storage or DjangoSyncStorage(models=models),
        transaction=transaction_fn,
    )

handle

Source code in django_spire/contrib/sync/django/server.py
def handle(
    self, incoming: SyncManifest,
) -> tuple[SyncManifest, DatabaseResult]:
    return self._engine.process(incoming)

serve

Source code in django_spire/contrib/sync/django/server.py
def serve(
    self,
    request: HttpRequest,
    validate_node_id: Callable[[HttpRequest, str], bool] | None = None,
) -> JsonResponse:
    return process_sync_request(
        request,
        self._engine,
        validate_node_id=validate_node_id,
    )