39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
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
|