signals.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding: utf-8 -*-
  2. from django.core.exceptions import ObjectDoesNotExist
  3. from django.db.models.signals import post_delete, pre_delete
  4. from django.dispatch import receiver
  5. from iepy.data import models
  6. @receiver(pre_delete, sender=models.EntityOccurrence)
  7. def pre_eo_delete(sender, instance, **kwargs):
  8. instance_segments = list(instance.segments.all())
  9. if hasattr(sender, "_segments_to_check"):
  10. sender._segments_to_check[instance.id] = instance_segments
  11. else:
  12. sender._segments_to_check = {instance.id: instance_segments}
  13. @receiver(post_delete, sender=models.EntityOccurrence)
  14. def on_eo_delete(sender, instance, **kwargs):
  15. segments_to_check = sender._segments_to_check.get(instance.id)
  16. if segments_to_check:
  17. for segment in segments_to_check:
  18. eos = list(segment.get_entity_occurrences())
  19. if len(eos) < 2:
  20. segment.delete()
  21. @receiver(pre_delete, sender=models.GazetteItem)
  22. def pre_gazette_delete(sender, instance, **kwargs):
  23. to_delete = list(instance.entity_set.all())
  24. sender.to_delete = to_delete
  25. @receiver(post_delete, sender=models.GazetteItem)
  26. def on_gazette_delete(sender, instance, **kwargs):
  27. if hasattr(sender, "to_delete"):
  28. for entity in sender.to_delete:
  29. entity.delete()
  30. @receiver(post_delete, sender=models.Entity)
  31. def on_entity_delete(sender, instance, **kwargs):
  32. if instance.gazette:
  33. instance.gazette.delete()
  34. @receiver(pre_delete, sender=models.IEDocument)
  35. def pre_iedocument_delete(sender, instance, **kwargs):
  36. to_delete = [instance.metadata]
  37. sender.to_delete = to_delete
  38. @receiver(post_delete, sender=models.IEDocument)
  39. def on_iedocument_delete(sender, instance, **kwargs):
  40. if hasattr(sender, "to_delete"):
  41. for item in sender.to_delete:
  42. item.delete()