from abc import ABC, abstractmethod from typing import Literal, Union import aiohttp from aiohttp import ClientResponse from database import Marketplace class BaseJsonMarketplace(ABC): @abstractmethod def __init__(self, marketplace: Marketplace): pass @abstractmethod async def update_stocks(self, data: Union[list, dict]): pass @abstractmethod def get_headers(self): pass @abstractmethod @property def api_url(self): pass async def _method(self, http_method: Literal['POST', 'GET', 'PATCH', 'PUT', 'DELETE'], method: str, data: dict) -> ClientResponse: async with aiohttp.ClientSession as session: async with session.request(http_method, f'{self.api_url}{method}', json=data, headers=self.get_headers() ) as response: return response