Skip to content

conflict

django_spire.contrib.sync.file.conflict

Conflict dataclass

key instance-attribute

source_record instance-attribute

target_record instance-attribute

baseline_record = None class-attribute instance-attribute

source_timestamp = None class-attribute instance-attribute

target_timestamp = None class-attribute instance-attribute

Resolution dataclass

action instance-attribute

record instance-attribute

ConflictStrategy

Bases: Protocol

resolve

Source code in django_spire/contrib/sync/file/conflict.py
def resolve(self, conflict: Conflict) -> Resolution: ...

SourceWins

resolve

Source code in django_spire/contrib/sync/file/conflict.py
def resolve(self, conflict: Conflict) -> Resolution:
    return Resolution(
        action=ResolutionAction.USE_SOURCE,
        record=conflict.source_record,
    )

TargetWins

resolve

Source code in django_spire/contrib/sync/file/conflict.py
def resolve(self, conflict: Conflict) -> Resolution:
    return Resolution(
        action=ResolutionAction.USE_TARGET,
        record=conflict.target_record,
    )

LastWriteWins

resolve

Source code in django_spire/contrib/sync/file/conflict.py
def resolve(self, conflict: Conflict) -> Resolution:
    if conflict.source_timestamp is None and conflict.target_timestamp is None:
        message = (
            f'Cannot resolve conflict for key {conflict.key!r}: '
            f'no timestamps available on either side'
        )

        raise FileSyncConflictError(message)

    if conflict.source_timestamp is None:
        return Resolution(
            action=ResolutionAction.USE_TARGET,
            record=conflict.target_record,
        )

    if conflict.target_timestamp is None:
        return Resolution(
            action=ResolutionAction.USE_SOURCE,
            record=conflict.source_record,
        )

    if conflict.source_timestamp >= conflict.target_timestamp:
        return Resolution(
            action=ResolutionAction.USE_SOURCE,
            record=conflict.source_record,
        )

    return Resolution(
        action=ResolutionAction.USE_TARGET,
        record=conflict.target_record,
    )