Files
Sipro-Stocks/marketplaces/yandexmarket.py
2025-05-11 07:46:57 +03:00

51 lines
1.7 KiB
Python

import asyncio
import json
import logging
from typing import Union
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]):
campaign_id = self.marketplace.campaign_id
return await self._method('PUT',
f'/campaigns/{campaign_id}/offers/stocks',
data={'skus': data})