|
23 | 23 | TypeVar, |
24 | 24 | ) |
25 | 25 |
|
26 | | -from httpx import URL, AsyncClient, Response, Timeout |
| 26 | +from httpx import ( |
| 27 | + URL, |
| 28 | + AsyncClient, |
| 29 | + RemoteProtocolError, |
| 30 | + Response, |
| 31 | + Timeout, |
| 32 | +) |
27 | 33 |
|
28 | 34 | from pontos.errors import PontosError |
29 | 35 | from pontos.helper import snake_case |
@@ -450,19 +456,34 @@ async def _get( |
450 | 456 | """ |
451 | 457 | headers = self._request_headers() |
452 | 458 |
|
| 459 | + latest_after_error: Response | RemoteProtocolError |
| 460 | + |
453 | 461 | for attempt in range(self._request_attempts): |
454 | 462 | if attempt > 0: |
455 | 463 | delay = RETRY_DELAY**attempt |
456 | 464 | await asyncio.sleep(delay) |
457 | 465 |
|
458 | 466 | await self._consider_rate_limit() |
459 | | - response = await self._client.get( |
460 | | - self._url, headers=headers, params=params |
461 | | - ) |
462 | | - if not response.is_server_error: |
463 | | - break |
464 | 467 |
|
465 | | - return response |
| 468 | + try: |
| 469 | + response = await self._client.get( |
| 470 | + self._url, headers=headers, params=params |
| 471 | + ) |
| 472 | + |
| 473 | + if response.is_server_error: |
| 474 | + latest_after_error = response |
| 475 | + continue |
| 476 | + |
| 477 | + return response |
| 478 | + |
| 479 | + except RemoteProtocolError as e: |
| 480 | + latest_after_error = e |
| 481 | + continue |
| 482 | + |
| 483 | + if isinstance(latest_after_error, RemoteProtocolError): |
| 484 | + raise latest_after_error |
| 485 | + |
| 486 | + return latest_after_error |
466 | 487 |
|
467 | 488 | async def __aenter__(self) -> "NVDApi": |
468 | 489 | # reset rate limit counter |
|
0 commit comments