2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-16 03:55:41 +00:00

Simplify event triggering

- add generic receivers for database actions
- exclude django_q tables, otherwise we get an infinite loop!

Ref: https://stackoverflow.com/questions/17507784/consolidating-multiple-post-save-signals-with-one-receiver/32230933#32230933
This commit is contained in:
Oliver
2022-01-10 17:24:53 +11:00
parent 4ddd6bc351
commit 886b1f1d72
6 changed files with 54 additions and 85 deletions

View File

@ -9,6 +9,8 @@ import logging
from django.conf import settings
from django.db import transaction
from django.db.models.signals import post_save, post_delete
from django.dispatch.dispatcher import receiver
from common.models import InvenTreeSetting
@ -87,3 +89,54 @@ def process_event(plugin_slug, event, *args, **kwargs):
plugin = plugin_registry.plugins[plugin_slug]
plugin.process_event(event, *args, **kwargs)
"""
Register some default event triggers on model signals
"""
@receiver(post_save)
def after_save(sender, instance, created, **kwargs):
"""
Trigger an event whenever a database entry is saved
"""
table = sender.objects.model._meta.db_table
if table.startswith('django_q'):
# Ignore django_q tables, to avoid recursion
return
if created:
trigger_event(
'instance.created',
id=instance.id,
model=sender.__name__,
table=table,
)
else:
trigger_event(
'instance.saved',
id=instance.id,
model=sender.__name__,
table=table,
)
@receiver(post_delete)
def after_delete(sender, instance, **kwargs):
"""
Trigger an event whenever a database entry is deleted
"""
table = sender.objects.model._meta.db_table
if table.startswith('django_q'):
# Ignore django_q tables, to avoid recursion
return
trigger_event(
'instance.deleted',
model=sender.__name__,
table=table,
)