feat: a lot of a lot

This commit is contained in:
2024-09-01 21:45:24 +03:00
parent 4ae03284a3
commit 6ad78df35d
12 changed files with 270 additions and 62 deletions

View File

@@ -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