from abc import ABC, abstractmethod from sqlalchemy.ext.asyncio import AsyncSession from external.marketplace.base import BaseMarketplaceApi from models import Product, ProductBarcode, ProductImage class BaseProductSynchronizer(ABC): products: list[Product] = [] barcodes: list[ProductBarcode] = [] images: list[ProductImage] = [] marketplace_products: list = [] api: BaseMarketplaceApi session: AsyncSession def __init__(self, session, marketplace, api): self.session = session self.marketplace = marketplace self.api = api self._clear() def _clear(self): self.products = [] self.barcodes = [] self.images = [] self.marketplace_products = [] async def _write(self): instances = self.products + self.marketplace_products + self.barcodes + self.images self.session.add_all(instances) await self.session.commit() @abstractmethod async def create_products(self): pass @abstractmethod async def synchronize_products(self): pass