From 87e124f614892892b950ef37bc7b145a536fac13 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Wed, 7 May 2025 03:15:23 +0300 Subject: [PATCH] Handle errors in vendor stock updates and inactive vendors Add error handling during the stock update process to log and skip problematic vendors without halting execution. Additionally, ensure `get_vendor_instance` only returns active vendors, raising an error if the vendor is inactive. This improves system resilience and data integrity. --- core/tasks.py | 5 ++++- core/vendors/__init__.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/tasks.py b/core/tasks.py index af6dc721..f8d9f286 100644 --- a/core/tasks.py +++ b/core/tasks.py @@ -42,7 +42,10 @@ def update_products_task(): for vendor_class in vendors_classes: vendor = vendor_class() - vendor.update_stock() + try: + vendor.update_stock() + except Exception as e: + logger.warning(f"Skipping {vendor_class} due to error: {e!s}") delete_stale() diff --git a/core/vendors/__init__.py b/core/vendors/__init__.py index 76ec1992..27e69c32 100644 --- a/core/vendors/__init__.py +++ b/core/vendors/__init__.py @@ -148,7 +148,10 @@ class AbstractVendor: def get_vendor_instance(self): try: - return Vendor.objects.get(name=self.vendor_name) + vendor = Vendor.objects.get(name=self.vendor_name) + if vendor.is_active: + return vendor + raise VendorError(f"Vendor {self.vendor_name!r} is inactive...") except Vendor.DoesNotExist: raise Exception(f"No matching vendor found with name {self.vendor_name!r}...")