|
7 | 7 | import builtins |
8 | 8 | import csv |
9 | 9 | import io |
| 10 | +import sys |
10 | 11 | import time |
11 | 12 | from datetime import date |
12 | 13 | from typing import TYPE_CHECKING, Any |
@@ -196,13 +197,13 @@ def _request( |
196 | 197 | # Check if we should retry based on status code |
197 | 198 | if response.status_code in RETRYABLE_STATUS_CODES and attempt < max_retries: |
198 | 199 | delay = self._calculate_retry_delay(attempt, response) |
199 | | - logger.warning( |
200 | | - "Received %d (attempt %d/%d), retrying in %.1fs", |
201 | | - response.status_code, |
202 | | - attempt + 1, |
203 | | - max_retries + 1, |
204 | | - delay, |
| 200 | + # Log to both logger and stderr for visibility |
| 201 | + msg = ( |
| 202 | + f"Rate limited ({response.status_code}), " |
| 203 | + f"attempt {attempt + 1}/{max_retries + 1}, retrying in {delay:.0f}s..." |
205 | 204 | ) |
| 205 | + logger.warning(msg) |
| 206 | + print(f"⏳ {msg}", file=sys.stderr) |
206 | 207 | time.sleep(delay) |
207 | 208 | continue |
208 | 209 |
|
@@ -261,13 +262,12 @@ async def _request_async( |
261 | 262 | # Check if we should retry based on status code |
262 | 263 | if response.status_code in RETRYABLE_STATUS_CODES and attempt < max_retries: |
263 | 264 | delay = self._calculate_retry_delay(attempt, response) |
264 | | - logger.warning( |
265 | | - "Received %d (attempt %d/%d), retrying in %.1fs", |
266 | | - response.status_code, |
267 | | - attempt + 1, |
268 | | - max_retries + 1, |
269 | | - delay, |
| 265 | + msg = ( |
| 266 | + f"Rate limited ({response.status_code}), " |
| 267 | + f"attempt {attempt + 1}/{max_retries + 1}, retrying in {delay:.0f}s..." |
270 | 268 | ) |
| 269 | + logger.warning(msg) |
| 270 | + print(f"⏳ {msg}", file=sys.stderr) |
271 | 271 | await asyncio.sleep(delay) |
272 | 272 | continue |
273 | 273 |
|
|
0 commit comments