Skip to content

Commit b0cc07c

Browse files
yoon-park-rlclaude
andauthored
fix: retry polling on HTTP/2 GOAWAY connection errors (#817)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 50507eb commit b0cc07c

2 files changed

Lines changed: 8 additions & 8 deletions

File tree

src/runloop_api_client/lib/wait_for_status.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from typing import List, Type, TypeVar, Callable, Optional, Awaitable
1515

1616
from .polling import PollingConfig, PollingTimeout
17-
from .._exceptions import APIStatusError, APITimeoutError
17+
from .._exceptions import APIStatusError, APIConnectionError
1818

1919
T = TypeVar("T")
2020

@@ -49,8 +49,8 @@ def wait_for_status(
4949
cast_to=cast_to,
5050
options={"max_retries": 0},
5151
)
52-
except (APITimeoutError, APIStatusError) as error:
53-
if isinstance(error, APITimeoutError) or error.response.status_code == 408:
52+
except (APIConnectionError, APIStatusError) as error:
53+
if isinstance(error, APIConnectionError) or error.response.status_code == 408:
5454
last_result = placeholder()
5555
else:
5656
raise
@@ -89,8 +89,8 @@ async def async_wait_for_status(
8989
cast_to=cast_to,
9090
options={"max_retries": 0},
9191
)
92-
except (APITimeoutError, APIStatusError) as error:
93-
if isinstance(error, APITimeoutError) or error.response.status_code == 408:
92+
except (APIConnectionError, APIStatusError) as error:
93+
if isinstance(error, APIConnectionError) or error.response.status_code == 408:
9494
last_result = placeholder()
9595
else:
9696
raise

src/runloop_api_client/resources/devboxes/devboxes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
SyncDiskSnapshotsCursorIDPage,
7272
AsyncDiskSnapshotsCursorIDPage,
7373
)
74-
from ..._exceptions import RunloopError, APIStatusError, APITimeoutError
74+
from ..._exceptions import RunloopError, APIStatusError, APIConnectionError
7575
from ...lib.polling import PollingConfig, poll_until
7676
from ..._base_client import AsyncPaginator, make_request_options
7777
from .disk_snapshots import (
@@ -957,7 +957,7 @@ def execute_and_await_completion(
957957
return execution
958958

959959
def handle_timeout_error(error: Exception) -> DevboxAsyncExecutionDetailView:
960-
if isinstance(error, APITimeoutError) or (
960+
if isinstance(error, APIConnectionError) or (
961961
isinstance(error, APIStatusError) and error.response.status_code == 408
962962
):
963963
return execution
@@ -2627,7 +2627,7 @@ async def execute_and_await_completion(
26272627
return execution
26282628

26292629
def handle_timeout_error(error: Exception) -> DevboxAsyncExecutionDetailView:
2630-
if isinstance(error, APITimeoutError) or (
2630+
if isinstance(error, APIConnectionError) or (
26312631
isinstance(error, APIStatusError) and error.response.status_code == 408
26322632
):
26332633
return execution

0 commit comments

Comments
 (0)