From 5db4c3be37ac0a206e5c7066ad8344e651eab7bd Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 1 Dec 2025 11:29:48 +0300 Subject: [PATCH 1/2] Fixes: 1) Improve error logging for vendor integration failures by including the integration path. Extra: 1) Reformat logger.warning message for better readability. --- engine/core/utils/vendors.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/engine/core/utils/vendors.py b/engine/core/utils/vendors.py index eb861c76..720daea3 100644 --- a/engine/core/utils/vendors.py +++ b/engine/core/utils/vendors.py @@ -19,6 +19,8 @@ def get_vendors_integrations(name: str | None = None) -> list[AbstractVendor]: module_name, class_name = vendor.integration_path.rsplit(".", 1) # type: ignore [union-attr] vendors_integrations.append(create_object(module_name, class_name)) except Exception as e: - logger.warning("Couldn't load integration for vendor %s: %s", vendor.name, e) + logger.warning( + "Couldn't load integration %s for vendor %s: %s", vendor.integration_path, vendor.name, str(e) + ) return vendors_integrations From 90345515026b9147d47b34582705abc267a98754 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 1 Dec 2025 12:38:23 +0300 Subject: [PATCH 2/2] Features: 1) Add configurable options for `BACKUP_DATABASE` and `BACKUP_MEDIA` in system settings; 2) Enhance `backup_task` to handle selective backups and return status message; Fixes: 1) Add exception handling for invalid image file dimensions in `validators.py`; Extra: 1) Update settings categories to include new system options; 2) Improve code clarity in `backup_task` and `validators.py`. --- engine/core/tasks.py | 12 +++++++++--- engine/core/validators.py | 5 ++++- evibes/settings/constance.py | 10 ++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/engine/core/tasks.py b/engine/core/tasks.py index 1dc435a9..6cc69cd1 100644 --- a/engine/core/tasks.py +++ b/engine/core/tasks.py @@ -23,9 +23,15 @@ logger = logging.getLogger(__name__) @shared_task(queue="default") -def backup_task(): - call_command("dbbackup", clean=True) - call_command("mediabackup", clean=True) +def backup_task() -> tuple[bool, str]: + backups: list[str] = [] + if config.BACKUP_DATABASE: + call_command("dbbackup", clean=True) + backups.append("database") + if config.BACKUP_MEDIA: + call_command("mediabackup", clean=True) + backups.append("media") + return True, f"Successfully backed up {', '.join(backups)}" @shared_task(queue="stock_updater") diff --git a/engine/core/validators.py b/engine/core/validators.py index b32d660d..d0bfbf4f 100644 --- a/engine/core/validators.py +++ b/engine/core/validators.py @@ -10,7 +10,10 @@ def validate_category_image_dimensions( max_height = max_height or 4320 if image: - width, height = get_image_dimensions(image.file) # type: ignore [arg-type] + try: + width, height = get_image_dimensions(image.file) # type: ignore [arg-type] + except (FileNotFoundError, OSError, ValueError): + return if int(width) > max_width or int(height) > max_height: # type: ignore [arg-type] raise ValidationError(_(f"image dimensions should not exceed w{max_width} x h{max_height} pixels")) diff --git a/evibes/settings/constance.py b/evibes/settings/constance.py index d29c12e1..7e3bf5ec 100644 --- a/evibes/settings/constance.py +++ b/evibes/settings/constance.py @@ -47,8 +47,10 @@ CONSTANCE_CONFIG = OrderedDict( ### SEO Options ### ("ADVERTSIMENT", (getenv("EVIBES_ADVERTISIMENT", ""), _("An entity for storing advertisiment data"), "json")), ("ANALYTICS", (getenv("EVIBES_ANALYTICS", ""), _("An entity for storing analytics data"), "json")), - ### Debugging Options ### + ### System Options ### ("SAVE_VENDORS_RESPONSES", (False, _("Save responses from vendors' APIs"))), + ("BACKUP_DATABASE", (True, _("Backup database"))), + ("BACKUP_MEDIA", (False, _("Backup media"))), ] ) @@ -85,7 +87,11 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "ADVERTSIMENT", "ANALYTICS", ), - _("Debugging Options"): ("SAVE_VENDORS_RESPONSES",), + _("System Options"): ( + "SAVE_VENDORS_RESPONSES", + "BACKUP_DATABASE", + "BACKUP_MEDIA", + ), } )