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_many_to_many_signals

Source code in django_spire/contrib/sync/django/signals.py
def register_many_to_many_signals(
    parent_models: list[type[SyncableMixin]],
) -> None:
    if not parent_models:
        message = 'parent_models must be a non-empty list'
        raise InvalidParameterError(message)

    for parent_model in parent_models:
        for field in parent_model._meta.many_to_many:
            through_model = field.remote_field.through

            dispatch_uid = (
                f'syncable_m2m:'
                f'{parent_model._meta.label}:{field.name}'
            )

            m2m_changed.connect(
                _on_many_to_many_changed,
                sender=through_model,
                dispatch_uid=dispatch_uid,
            )