Skip to content

Commit 292a6ef

Browse files
authored
Use HttpError for the typed client (#159)
1 parent d7eb874 commit 292a6ef

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

python/restate/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from .context import Context, ObjectContext, ObjectSharedContext
2727
from .context import WorkflowContext, WorkflowSharedContext
2828
from .retry_policy import InvocationRetryPolicy
29-
from .client_types import RestateClient, RestateClientSendHandle
29+
from .client_types import RestateClient, HttpError, RestateClientSendHandle
3030

3131
# pylint: disable=line-too-long
3232
from .context import (
@@ -119,5 +119,6 @@ async def create_client(
119119
"getLogger",
120120
"RestateClient",
121121
"RestateClientSendHandle",
122+
"HttpError",
122123
"create_client",
123124
]

python/restate/client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import typing
1818
from contextlib import asynccontextmanager
1919

20-
from .client_types import RestateClient, RestateClientSendHandle
20+
from .client_types import RestateClient, RestateClientSendHandle, HttpError
2121

2222
from .context import HandlerType
2323
from .serde import BytesSerde, JsonSerde, Serde
@@ -142,7 +142,8 @@ async def post(
142142
if idempotency_key is not None:
143143
dict_headers["Idempotency-Key"] = idempotency_key
144144
res = await self.client.post(endpoint, headers=dict_headers, content=content)
145-
res.raise_for_status()
145+
if res.status_code >= 400:
146+
raise HttpError(res.status_code, res.reason_phrase, res.text)
146147
return res.content
147148

148149
@typing.final

python/restate/client_types.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ def __init__(self, invocation_id: str, status_code: int):
3434
self.status_code = status_code
3535

3636

37+
class HttpError(Exception):
38+
"""
39+
An error that occurs during an HTTP request.
40+
"""
41+
42+
def __init__(self, status_code: int, message: str, body: str | None = None):
43+
super().__init__(f"HTTP {status_code}: {message}")
44+
self.status_code = status_code
45+
self.message = message
46+
self.body = body
47+
48+
3749
class RestateClient(abc.ABC):
3850
"""
3951
An abstract base class for a Restate client.

0 commit comments

Comments
 (0)