From 28a6e9e65fdc6f7ee369b37ecb425db676d0cfbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 2 Dec 2025 09:23:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D0=BE=D0=BC=D0=B8=D1=82?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87?= =?UTF-8?q?=D0=B8=D0=BA=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82=D1=8B=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=20=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D0=BB=20=D1=81=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/employees/signals.py | 98 +++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/backend/employees/signals.py b/backend/employees/signals.py index 2b05f594..cd69420c 100644 --- a/backend/employees/signals.py +++ b/backend/employees/signals.py @@ -10,57 +10,61 @@ from .models import Employee, EmployeeAction from bots.models import BotSubscriber -@receiver(pre_save, sender=Employee) -def compress_and_cleanup_avatar(sender, instance: Employee, **kwargs): - """Сжимает новый аватар и удаляет старый файл при замене.""" - # Импортируем здесь, чтобы избежать циклических импортов - from common.image_utils import compress_avatar - - avatar_field = instance.avatar - avatar_name = getattr(avatar_field, "name", "") - if avatar_field and avatar_name: - storage = avatar_field.storage - if storage.exists(avatar_name): - try: - avatar_field.open("rb") - avatar_field.seek(0) - original_data = avatar_field.read() +if False: # pragma: no cover - временно отключаем сигнал для тестирования + @receiver(pre_save, sender=Employee) + def compress_and_cleanup_avatar(sender, instance: Employee, **kwargs): + """Сжимает новый аватар и удаляет старый файл при замене.""" + # Импортируем здесь, чтобы избежать циклических импортов + from common.image_utils import compress_avatar + + avatar_field = instance.avatar + avatar_name = getattr(avatar_field, "name", "") + if avatar_field and avatar_name: + storage = avatar_field.storage + if storage.exists(avatar_name): + try: + avatar_field.open("rb") + avatar_field.seek(0) + original_data = avatar_field.read() - compressed_data = compress_avatar(original_data) + compressed_data = compress_avatar(original_data) - if len(compressed_data) < len(original_data): - filename = avatar_name.split("/")[-1] - if not filename.lower().endswith(".jpg"): - filename = filename.rsplit(".", 1)[0] + ".jpg" + if len(compressed_data) < len(original_data): + filename = avatar_name.split("/")[-1] + if not filename.lower().endswith(".jpg"): + filename = filename.rsplit(".", 1)[0] + ".jpg" - avatar_field.save( - filename, - ContentFile(compressed_data), - save=False, + avatar_field.save( + filename, + ContentFile(compressed_data), + save=False, + ) + except FileNotFoundError: + print( + "Avatar file missing during compression: " + f"{avatar_name}" ) - except FileNotFoundError: - print(f"Avatar file missing during compression: {avatar_name}") - except Exception as e: - # Логируем ошибку, но не прерываем сохранение - print(f"Error compressing avatar: {e}") - - # Удаляем старый файл если он был заменен - if instance.pk is None: - return - - try: - old = sender.objects.get(pk=instance.pk) - except sender.DoesNotExist: - return - - # Если аватар изменился или удален - if old.avatar and old.avatar != instance.avatar: - # Удаляем старый файл с диска - if os.path.isfile(old.avatar.path): - try: - os.remove(old.avatar.path) - except Exception as e: - print(f"Error deleting old avatar: {e}") + except Exception as e: + # Логируем ошибку, но не прерываем сохранение + print(f"Error compressing avatar: {e}") + + # Удаляем старый файл если он был заменен + if instance.pk is None: + return + + try: + old = sender.objects.get(pk=instance.pk) + except sender.DoesNotExist: + return + + # Если аватар изменился или удален + if old.avatar and old.avatar != instance.avatar: + # Удаляем старый файл с диска + if os.path.isfile(old.avatar.path): + try: + os.remove(old.avatar.path) + except Exception as e: + print(f"Error deleting old avatar: {e}") @receiver(pre_save, sender=Employee)