from django.db.models.signals import pre_save, pre_delete
from django.dispatch import receiver

from .models import WebApp

# Admin bulk deletion doesn't call model.delete()
# So, signals are used instead of model method overriding

@receiver(pre_save, sender=WebApp, dispatch_uid='webapps.type.save')
def type_save(sender, *args, **kwargs):
    instance = kwargs['instance']
    # Since a webapp might need to cleanup its old config files, the data
    # from the OLD VERSION of the webapp is needed.
    if instance.pk:
        instance._old_self = type(instance).objects.get(id=instance.pk)
    instance.type_instance.save()

@receiver(pre_delete, sender=WebApp, dispatch_uid='webapps.type.delete')
def type_delete(sender, *args, **kwargs):
    instance = kwargs['instance']
    instance._old_self = type(instance).objects.get(id=instance.pk)
    try:
        instance.type_instance.delete()
    except KeyError:
        pass