Skip to content

delete

django_spire.contrib.sync.django.storage.strategy.delete

DeleteStrategy

Bases: Protocol

delete

Source code in django_spire/contrib/sync/django/storage/strategy/delete.py
def delete(self, model: type[SyncableMixin], deletes: dict[str, int]) -> None: ...

HardDeleteStrategy

Source code in django_spire/contrib/sync/django/storage/strategy/delete.py
def __init__(self, identity_field: str = 'id') -> None:
    self._identity_field = identity_field

delete

Source code in django_spire/contrib/sync/django/storage/strategy/delete.py
def delete(
    self,
    model: type[SyncableMixin],
    deletes: dict[str, int],
) -> None:
    for key, tombstone_ts in deletes.items():
        staleness_filter = {
            self._identity_field: key,
            'sync_field_last_modified__lte': tombstone_ts,
        }

        model.objects.filter(**staleness_filter).delete()

SoftDeleteStrategy

Source code in django_spire/contrib/sync/django/storage/strategy/delete.py
def __init__(self, identity_field: str = 'id') -> None:
    self._identity_field = identity_field

delete

Source code in django_spire/contrib/sync/django/storage/strategy/delete.py
def delete(
    self,
    model: type[SyncableMixin],
    deletes: dict[str, int],
) -> None:
    identity_lookup = {f'{self._identity_field}__in': list(deletes.keys())}
    instances = list(model.objects.filter(**identity_lookup))

    pending = self._collect_pending(instances, deletes)

    if not pending:
        return

    with sync_bypass():
        for instance in pending:
            key = str(getattr(instance, self._identity_field))
            tombstone_ts = deletes[key]

            staleness_filter = {
                self._identity_field: key,
                'sync_field_last_modified__lte': tombstone_ts,
            }

            model.objects.filter(**staleness_filter).update(
                is_deleted=True,
                sync_field_timestamps=instance.sync_field_timestamps,
                sync_field_last_modified=instance.sync_field_last_modified,
            )