From a31ce44dfc95476ec4b22b39efa4a56d1de7f3b9 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 9 May 2025 04:29:07 +0300 Subject: [PATCH] Features: 1) Add Celery shared_task decorator to `update_stock` method for asynchronous execution. Fixes: 1) Replace direct `update_stock()` calls with `update_stock.delay()` to enable task queuing. Extra: 1) Add missing import for `shared_task` in `core/vendors/__init__.py`. --- core/tasks.py | 2 +- core/vendors/__init__.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/tasks.py b/core/tasks.py index 03691f3d..9797ab40 100644 --- a/core/tasks.py +++ b/core/tasks.py @@ -43,7 +43,7 @@ def update_products_task(): for vendor_class in vendors_classes: vendor = vendor_class() try: - vendor.update_stock() + vendor.update_stock.delay() except Exception as e: logger.warning(f"Skipping {vendor_class} due to error: {e!s}") diff --git a/core/vendors/__init__.py b/core/vendors/__init__.py index 3a05c9e6..fb9aac2e 100644 --- a/core/vendors/__init__.py +++ b/core/vendors/__init__.py @@ -2,6 +2,8 @@ import json from contextlib import suppress from math import ceil +from celery import shared_task + from core.elasticsearch import process_query from core.models import AttributeValue, Brand, Category, Product, Stock, Vendor from payments.errors import RatesError @@ -204,6 +206,7 @@ class AbstractVendor: self.get_stocks_queryset().delete() self.get_attribute_values_queryset().delete() + @shared_task def update_stock(self): pass