import logging from django.dispatch import receiver from django.utils.module_loading import import_string from django.conf import settings from django.db import models from core.models import Image from django_images.models import Thumbnail _plugins = getattr(settings, "ENABLED_PLUGINS", []) _plugin_instances = [] def _load_plugins(): for plugin_path in _plugins: plugin_cls = import_string(plugin_path) _plugin_instances.append(plugin_cls()) @receiver(models.signals.pre_save, sender=Image) def process_image_pre_creation(sender, instance: Image, **kwargs): # FIXME(winkidney): May have issue on determining if it # is created or not if instance.pk is not None: return for plugin in _plugin_instances: process_fn = getattr(plugin, "process_image_pre_creation") try: process_fn( django_settings=settings, image_instance=instance, ) except Exception: logging.exception( "Error occurs while trying to access plugin's pin_pre_save " "for plugin %s" % plugin ) @receiver(models.signals.pre_save, sender=Thumbnail) def process_thumbnail_pre_creation(sender, instance: Thumbnail, **kwargs): # FIXME(winkidney): May have issue on determining if it # is created or not if instance.pk is not None: return for plugin in _plugin_instances: process_fn = getattr(plugin, "process_thumbnail_pre_creation") try: process_fn( django_settings=settings, thumbnail_instance=instance, ) except Exception: logging.exception( "Error occurs while trying to access plugin's process_thumbnail_pre_creation " "for plugin %s" % plugin ) def init(): _load_plugins()