Files
Sipro-Stocks/sender/ozon.py
2025-05-11 08:12:26 +03:00

48 lines
1.5 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:
async with response:
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 session.close()
async def after_chunk_processed(self):
return await asyncio.sleep(80 / 100)
async def before_chunk_processed(self):
pass