import asyncio import time from random import randint from tracemalloc import Trace from typing import Optional from sqlalchemy import True_ from sqlalchemy.ext.asyncio import AsyncSession from backend.session import session_maker from background.celery_app import celery from decorators.async_utils import async_to_sync from decorators.locking import lock from marketplaces import MarketplaceControllerFactory from models import Marketplace @celery.task( name='synchronize_marketplace' ) @lock( 'synchronize_marketplace', include_args_in_key=True ) @async_to_sync async def synchronize_marketplace(marketplace_id: int): try: async with session_maker() as session: session: AsyncSession marketplace: Optional[Marketplace] = await session.get(Marketplace, marketplace_id) if not marketplace: return controller = MarketplaceControllerFactory.get_controller(session, marketplace) await controller.create_products() await controller.synchronize_products() return f"Marketplace {marketplace.id} synchronized" except Exception as e: return e