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})
 |