diff --git a/akarpov/common/models.py b/akarpov/common/models.py index 7e9090b..c2741bd 100644 --- a/akarpov/common/models.py +++ b/akarpov/common/models.py @@ -1,57 +1,14 @@ -import os - from django.db import models -from akarpov.common.tasks import crop_model_image +from akarpov.common.signals import ( + create_cropped_model_image, + delete_cropped_model_image, + update_cropped_model_image, +) from akarpov.utils.files import user_file_upload_mixin from akarpov.utils.generators import generate_charset -def create_cropped_model_image(sender, instance, created, **kwargs): - model = sender - if created: - if instance.image: - crop_model_image.apply_async( - kwargs={ - "pk": instance.pk, - "app_label": model._meta.app_label, - "model_name": model._meta.model_name, - }, - countdown=2, - ) - - -def update_cropped_model_image(sender, instance, **kwargs): - model = sender - if instance.id: - previous = model.objects.get(id=instance.id) - if previous.image != instance.image: - # delete previous cropped image - if instance.image_cropped: - if os.path.isfile(instance.image_cropped.path): - os.remove(instance.image_cropped.path) - # run task to create new cropped image - if kwargs["update_fields"] != frozenset({"image_cropped"}) and instance: - if instance.image: - crop_model_image.apply_async( - kwargs={ - "pk": instance.pk, - "app_label": model._meta.app_label, - "model_name": model._meta.model_name, - }, - countdown=2, - ) - else: - instance.image_cropped = None - - -def delete_cropped_model_image(sender, instance, **kwargs): - print(instance.image_cropped) - if instance.image_cropped: - if os.path.isfile(instance.image_cropped.path): - os.remove(instance.image_cropped.path) - - class BaseImageModel(models.Model): """ stores user's images in their media folder, creates, updates and deletes preview diff --git a/akarpov/common/signals.py b/akarpov/common/signals.py new file mode 100644 index 0000000..2969751 --- /dev/null +++ b/akarpov/common/signals.py @@ -0,0 +1,47 @@ +import os + +from akarpov.common.tasks import crop_model_image + + +def create_cropped_model_image(sender, instance, created, **kwargs): + model = sender + if created: + if instance.image: + crop_model_image.apply_async( + kwargs={ + "pk": instance.pk, + "app_label": model._meta.app_label, + "model_name": model._meta.model_name, + }, + countdown=2, + ) + + +def update_cropped_model_image(sender, instance, **kwargs): + model = sender + if instance.id: + previous = model.objects.get(id=instance.id) + if previous.image != instance.image: + # delete previous cropped image + if instance.image_cropped: + if os.path.isfile(instance.image_cropped.path): + os.remove(instance.image_cropped.path) + # run task to create new cropped image + if kwargs["update_fields"] != frozenset({"image_cropped"}) and instance: + if instance.image: + crop_model_image.apply_async( + kwargs={ + "pk": instance.pk, + "app_label": model._meta.app_label, + "model_name": model._meta.model_name, + }, + countdown=2, + ) + else: + instance.image_cropped = None + + +def delete_cropped_model_image(sender, instance, **kwargs): + if instance.image_cropped: + if os.path.isfile(instance.image_cropped.path): + os.remove(instance.image_cropped.path)