You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/tickets/signal_handlers/ticket.py

29 lines
834 B

# -*- coding: utf-8 -*-
#
from django.dispatch import receiver
from django.db.models.signals import post_save, m2m_changed
from common.decorator import on_transaction_commit
from common.utils import get_logger
from tickets.models import Ticket
logger = get_logger(__name__)
@on_transaction_commit
def after_save_set_rel_snapshot(sender, instance, update_fields=None, **kwargs):
if update_fields and list(update_fields)[0] == 'rel_snapshot':
return
instance.set_rel_snapshot()
@on_transaction_commit
def on_m2m_change(sender, action, instance, reverse=False, **kwargs):
if action.startswith('post'):
instance.set_rel_snapshot()
for ticket_cls in Ticket.__subclasses__():
post_save.connect(after_save_set_rel_snapshot, sender=ticket_cls)
m2m_changed.connect(on_m2m_change, sender=ticket_cls)