Skip to content

signals

django_spire.contrib.sync.django.signals

logger = logging.getLogger(__name__) module-attribute

register_delete_signals

Source code in django_spire/contrib/sync/django/signals.py
def register_delete_signals(
    models: list[type[SyncableMixin]],
) -> None:
    from django_spire.contrib.sync.django.mixin import SyncableMixin  # noqa: PLC0415

    for model in models:
        if not issubclass(model, SyncableMixin):
            continue

        dispatch_uid = f'syncable_delete:{model._meta.label}'

        post_delete.connect(
            _on_syncable_delete,
            sender=model,
            dispatch_uid=dispatch_uid,
        )

register_m2m_signals

Source code in django_spire/contrib/sync/django/signals.py
def register_m2m_signals(
    models: list[type[SyncableMixin]],
) -> None:
    from django_spire.contrib.sync.django.mixin import SyncableMixin  # noqa: PLC0415

    for model in models:
        if not issubclass(model, SyncableMixin):
            message = (
                f'Cannot register M2M signals for {model!r}: '
                f'must be a SyncableMixin subclass'
            )

            raise InvalidParameterError(message)

        for field in model._meta.many_to_many:
            through = field.remote_field.through
            dispatch_uid = f'syncable_m2m:{model._meta.label}:{field.name}'

            m2m_changed.connect(
                _on_m2m_changed,
                sender=through,
                dispatch_uid=dispatch_uid,
            )