47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import asyncio
 | 
						|
import logging
 | 
						|
 | 
						|
from starlette.responses import JSONResponse
 | 
						|
 | 
						|
from sender.base import BaseStocksSender, SendStockStatus
 | 
						|
 | 
						|
 | 
						|
class OzonStocksSender(BaseStocksSender):
 | 
						|
    @property
 | 
						|
    def max_retries(self) -> int:
 | 
						|
        return 5
 | 
						|
 | 
						|
    @property
 | 
						|
    def chunk_size(self) -> int:
 | 
						|
        return 100
 | 
						|
 | 
						|
    async def _process_chunk(self, chunk: list[dict]) -> SendStockStatus:
 | 
						|
        session ,response = await self.api.update_stocks(data=chunk)
 | 
						|
        try:
 | 
						|
            status_code = response.status
 | 
						|
            if status_code == 200:
 | 
						|
                return SendStockStatus.SUCCESS
 | 
						|
            if response.content_type != JSONResponse.media_type:
 | 
						|
                return SendStockStatus.ERROR
 | 
						|
            json_data = await response.json()
 | 
						|
            error_code = json_data.get('code')
 | 
						|
            error_message = json_data.get('message')
 | 
						|
            if error_code == 8:
 | 
						|
                await asyncio.sleep(1)
 | 
						|
                return SendStockStatus.SHOULD_RETRY
 | 
						|
            logging.error(f'[{self.updater.marketplace.id}]: {error_message}')
 | 
						|
            if status_code in [
 | 
						|
                404,
 | 
						|
                500,
 | 
						|
            ]:
 | 
						|
                return SendStockStatus.SHOULD_RETRY
 | 
						|
            return SendStockStatus.ERROR
 | 
						|
        finally:
 | 
						|
            await response.close()
 | 
						|
            await session.close()
 | 
						|
    async def after_chunk_processed(self):
 | 
						|
        return await asyncio.sleep(80 / 100)
 | 
						|
 | 
						|
    async def before_chunk_processed(self):
 | 
						|
        pass
 |