feat: a lot of a lot
This commit is contained in:
@@ -1,20 +1,38 @@
|
||||
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')
|
||||
def synchronize_marketplace(marketplace_id: int):
|
||||
time.sleep(10)
|
||||
if randint(0,10) % 2 == 0:
|
||||
return 1
|
||||
else:
|
||||
raise Exception('Some error')
|
||||
# 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.synchronize_products()
|
||||
@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
|
||||
|
||||
Reference in New Issue
Block a user