From 87235403890c6fa80cd5974ce31708c9e99c56b6 Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Sat, 22 Mar 2025 14:28:12 +0300 Subject: [PATCH] Refactor flood wait handling to return 429 status with Retry-After header instead of sleeping, --- api_server.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/api_server.py b/api_server.py index e8f4f29..04e9bbc 100644 --- a/api_server.py +++ b/api_server.py @@ -597,10 +597,12 @@ async def get_rss_feed(channel: str, total_wait_time = wait_time + random_additional_wait if total_wait_time > 190: total_wait_time = 190 - logger.warning(f"flood_wait_error: channel {channel}, waiting {total_wait_time:.1f} seconds (base: {wait_time}s, random: {random_additional_wait:.1f}s)") - await asyncio.sleep(total_wait_time) - logger.info(f"flood_wait_retry: channel {channel}") - continue + logger.warning(f"flood_wait_error: channel {channel}, retry after {total_wait_time:.1f} seconds (base: {wait_time}s, random: {random_additional_wait:.1f}s)") + return Response( + status_code=429, + headers={"Retry-After": str(int(total_wait_time))}, + content="Too many requests, please try again later" + ) except Exception as e: error_message = f"rss_generation_error: channel {channel}, error {str(e)}" logger.error(error_message)