rewritten crap
This commit is contained in:
51
sender/yandexmarket.py
Normal file
51
sender/yandexmarket.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import time
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from sender.base import BaseStocksSender, SendStockStatus
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from updaters.base import BaseMarketplaceUpdater
|
||||
|
||||
|
||||
class YandexmarketStocksSender(BaseStocksSender):
|
||||
def __init__(self, updater: "BaseMarketplaceUpdater"):
|
||||
super().__init__(updater)
|
||||
|
||||
self.start_time = time.time()
|
||||
|
||||
self.total_stocks_sent = 0
|
||||
|
||||
@property
|
||||
def max_retries(self) -> int:
|
||||
return 5
|
||||
|
||||
@property
|
||||
def chunk_size(self) -> int:
|
||||
return 2000
|
||||
|
||||
async def _process_chunk(self, chunk: list[dict]) -> SendStockStatus:
|
||||
response = await self.api.update_stocks(chunk)
|
||||
status_code = response.status
|
||||
if status_code == 200:
|
||||
self.total_stocks_sent += len(chunk)
|
||||
return SendStockStatus.SUCCESS
|
||||
if status_code == 420:
|
||||
time_to_sleep = 60 - (time.time() - self.start_time)
|
||||
await asyncio.sleep(time_to_sleep)
|
||||
return SendStockStatus.SHOULD_RETRY
|
||||
response_text = await response.text()
|
||||
logging.error(f'[{self.updater.marketplace.id}]: {response_text}')
|
||||
return SendStockStatus.ERROR
|
||||
|
||||
async def after_chunk_processed(self):
|
||||
time_delta = time.time() - self.start_time
|
||||
if self.total_stocks_sent >= 100_000 and time_delta < 60:
|
||||
time_to_sleep = 60 - time_delta
|
||||
await asyncio.sleep(time_to_sleep)
|
||||
self.start_time = time.time()
|
||||
self.total_stocks_sent = 0
|
||||
|
||||
async def before_chunk_processed(self):
|
||||
pass
|
||||
Reference in New Issue
Block a user