53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import asyncio
|
|
import json
|
|
import logging
|
|
from typing import Union
|
|
|
|
from aiohttp import ClientResponse, ClientSession
|
|
|
|
from backend.config import YANDEX_CLIENT_ID
|
|
from database import Marketplace
|
|
from limiter import BatchLimiter
|
|
from marketplaces.base import BaseMarketplaceApi
|
|
from utils import chunk_list
|
|
|
|
|
|
class YandexmarketMarketplaceApi(BaseMarketplaceApi):
|
|
def __init__(self, marketplace: Marketplace):
|
|
self.marketplace = marketplace
|
|
self.is_valid = True
|
|
try:
|
|
auth_data = json.loads(marketplace.auth_data)
|
|
except Exception:
|
|
logging.error(f"Couldn't load auth data for marketplace [{self.marketplace.id}]")
|
|
self.is_valid = False
|
|
return
|
|
api_key = auth_data.get('apiKey')
|
|
if api_key:
|
|
self.limiter_key = str(marketplace.company_id) + str(api_key) + str(self.marketplace.campaign_id)
|
|
self.headers = {
|
|
'Api-Key': api_key
|
|
}
|
|
else:
|
|
access_token = auth_data.get('accessToken')
|
|
if not access_token:
|
|
self.is_valid = False
|
|
return
|
|
self.limiter_key = str(marketplace.company_id) + str(access_token) + str(self.marketplace.campaign_id)
|
|
self.headers = {
|
|
'Authorization': f'OAuth oauth_token="{access_token}", oauth_client_id="{YANDEX_CLIENT_ID}"'
|
|
}
|
|
|
|
def get_headers(self):
|
|
return self.headers
|
|
|
|
@property
|
|
def api_url(self):
|
|
return 'https://api.partner.market.yandex.ru/v2'
|
|
|
|
async def update_stocks(self, data: Union[list, dict]) -> (ClientSession, ClientResponse):
|
|
campaign_id = self.marketplace.campaign_id
|
|
return await self._method('PUT',
|
|
f'/campaigns/{campaign_id}/offers/stocks',
|
|
data={'skus': data})
|