from django.db.models.signals import pre_save, post_save, pre_delete from django.dispatch import receiver from core_images.models import FallbackUrl, LabelImage from core_images.services.internal_data.service import ( get_internal_data_service, ) from core_images.services.scuba.service import get_scuba_service from core_images.tasks import invalidate_cloudfront_by_ids_task @receiver(pre_save, sender=FallbackUrl) @receiver(post_save, sender=FallbackUrl) @receiver(pre_delete, sender=FallbackUrl) def on_fallbacks_changes(sender, instance, **kwargs): ids = {instance.gras_id} try: ids.update([FallbackUrl.objects.get(id=instance.id).gras_id]) except (TypeError, FallbackUrl.DoesNotExist): pass for gras_id in ids: scuba_service = get_scuba_service() scuba_service.invalidate_artist_cache(gras_id) internal_data_service = get_internal_data_service() internal_data_service.invalidate_fallback_cache(gras_id) invalidate_cloudfront_by_ids_task.delay( [gras_id, gras_id.replace("GRAS_", "")] ) @receiver(pre_save, sender=LabelImage) def on_label_image_changes(sender, instance, **kwargs): ids = {instance.label_id} try: ids.update([LabelImage.objects.get(id=instance.id).label_id]) except (TypeError, LabelImage.DoesNotExist): pass for label_id in ids: internal_data_service = get_internal_data_service() internal_data_service.invalidate_labels_cache(label_id) invalidate_cloudfront_by_ids_task.delay([label_id]) @receiver(post_save, sender=LabelImage) def on_label_image_save(sender, instance, **kwargs): label_id = instance.label_id internal_data_service = get_internal_data_service() internal_data_service.create_label_thumbnails(label_id) internal_data_service.invalidate_labels_cache(label_id) invalidate_cloudfront_by_ids_task.delay([label_id]) @receiver(pre_delete, sender=LabelImage) def on_label_image_delete(sender, instance, **kwargs): label_id = instance.label_id internal_data_service = get_internal_data_service() internal_data_service.delete_label_thumbnails(label_id) internal_data_service.invalidate_labels_cache(label_id) invalidate_cloudfront_by_ids_task.delay([label_id])