Skip to content

Commit 1e3aa57

Browse files
committed
add UnknownRiverError and translate_unknown_error
1 parent 70c5ab8 commit 1e3aa57

7 files changed

Lines changed: 49 additions & 26 deletions

File tree

src/replit_river/client.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ class RiverUnknownValue(BaseModel):
3535
tag: Literal["RiverUnknownValue"]
3636
value: Any
3737

38+
@dataclass(frozen=True)
39+
class RiverUnknownError(RiverError):
40+
pass
3841

3942
def translate_unknown_value(
4043
value: Any, handler: Callable[[Any], Any], info: ValidationInfo
@@ -44,6 +47,13 @@ def translate_unknown_value(
4447
except Exception:
4548
return RiverUnknownValue(tag="RiverUnknownValue", value=value)
4649

50+
def translate_unknown_error(
51+
value: Any, handler: Callable[[Any], Any], info: ValidationInfo
52+
) -> Any | RiverUnknownError:
53+
try:
54+
return handler(value)
55+
except Exception:
56+
return RiverUnknownError()
4757

4858
class Client(Generic[HandshakeMetadataType]):
4959
def __init__(

src/replit_river/codegen/client.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
9494
from pydantic import BaseModel, Field, TypeAdapter, WrapValidator
9595
from replit_river.error_schema import RiverError
96-
from replit_river.client import RiverUnknownValue, translate_unknown_value
96+
from replit_river.client import RiverUnknownError, translate_unknown_error
9797
9898
import replit_river as river
9999
@@ -769,6 +769,7 @@ def append_type_adapter_definition(
769769
_type: TypeExpression,
770770
module_info: list[ModuleName],
771771
) -> None:
772+
varname = render_type_expr(type_adapter_name)
772773
rendered_type_expr = render_type_expr(_type)
773774
serdes.append(
774775
(
@@ -777,7 +778,7 @@ def append_type_adapter_definition(
777778
[
778779
FileContents(
779780
dedent(f"""
780-
{render_type_expr(type_adapter_name)}: TypeAdapter[Any] = (
781+
{varname}: TypeAdapter[{rendered_type_expr}] = (
781782
TypeAdapter({rendered_type_expr})
782783
)
783784
""")

src/replit_river/codegen/typing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ def render_type_expr(value: TypeExpression) -> str:
8787
case OpenUnionTypeExpr(inner):
8888
return (
8989
"Annotated["
90-
f"{render_type_expr(inner)} | RiverUnknownValue,"
91-
"WrapValidator(translate_unknown_value)"
90+
f"{render_type_expr(inner)} | RiverUnknownError,"
91+
"WrapValidator(translate_unknown_error)"
9292
"]"
9393
)
9494
case TypeName(name):

tests/codegen/rpc/generated/test_service/rpc_method.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from pydantic import BaseModel, Field, TypeAdapter, WrapValidator
2121
from replit_river.error_schema import RiverError
22-
from replit_river.client import RiverUnknownValue, translate_unknown_value
22+
from replit_river.client import RiverUnknownError, translate_unknown_error
2323

2424
import replit_river as river
2525

@@ -39,11 +39,13 @@ class Rpc_MethodInput(TypedDict):
3939
data: str
4040

4141

42-
Rpc_MethodInputTypeAdapter: TypeAdapter[Any] = TypeAdapter(Rpc_MethodInput)
42+
Rpc_MethodInputTypeAdapter: TypeAdapter[Rpc_MethodInput] = TypeAdapter(Rpc_MethodInput)
4343

4444

4545
class Rpc_MethodOutput(BaseModel):
4646
data: str
4747

4848

49-
Rpc_MethodOutputTypeAdapter: TypeAdapter[Any] = TypeAdapter(Rpc_MethodOutput)
49+
Rpc_MethodOutputTypeAdapter: TypeAdapter[Rpc_MethodOutput] = TypeAdapter(
50+
Rpc_MethodOutput
51+
)

tests/codegen/snapshot/snapshots/test_unknown_enum/enumService/needsEnum.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,26 @@
1919

2020
from pydantic import BaseModel, Field, TypeAdapter, WrapValidator
2121
from replit_river.error_schema import RiverError
22-
from replit_river.client import RiverUnknownValue, translate_unknown_value
22+
from replit_river.client import RiverUnknownError, translate_unknown_error
2323

2424
import replit_river as river
2525

2626

2727
NeedsenumInput = Literal["in_first"] | Literal["in_second"]
2828
encode_NeedsenumInput: Callable[["NeedsenumInput"], Any] = lambda x: x
2929

30-
NeedsenumInputTypeAdapter: TypeAdapter[Any] = TypeAdapter(NeedsenumInput)
30+
NeedsenumInputTypeAdapter: TypeAdapter[NeedsenumInput] = TypeAdapter(NeedsenumInput)
3131

3232
NeedsenumOutput = Annotated[
33-
Literal["out_first"] | Literal["out_second"] | RiverUnknownValue,
34-
WrapValidator(translate_unknown_value),
33+
Literal["out_first"] | Literal["out_second"] | RiverUnknownError,
34+
WrapValidator(translate_unknown_error),
3535
]
3636

37-
NeedsenumOutputTypeAdapter: TypeAdapter[Any] = TypeAdapter(NeedsenumOutput)
37+
NeedsenumOutputTypeAdapter: TypeAdapter[NeedsenumOutput] = TypeAdapter(NeedsenumOutput)
3838

3939
NeedsenumErrors = Annotated[
40-
Literal["err_first"] | Literal["err_second"] | RiverUnknownValue,
41-
WrapValidator(translate_unknown_value),
40+
Literal["err_first"] | Literal["err_second"] | RiverUnknownError,
41+
WrapValidator(translate_unknown_error),
4242
]
4343

44-
NeedsenumErrorsTypeAdapter: TypeAdapter[Any] = TypeAdapter(NeedsenumErrors)
44+
NeedsenumErrorsTypeAdapter: TypeAdapter[NeedsenumErrors] = TypeAdapter(NeedsenumErrors)

tests/codegen/snapshot/snapshots/test_unknown_enum/enumService/needsEnumObject.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from pydantic import BaseModel, Field, TypeAdapter, WrapValidator
2121
from replit_river.error_schema import RiverError
22-
from replit_river.client import RiverUnknownValue, translate_unknown_value
22+
from replit_river.client import RiverUnknownError, translate_unknown_error
2323

2424
import replit_river as river
2525

@@ -72,7 +72,9 @@ class NeedsenumobjectInputOneOf_in_second(TypedDict):
7272
else encode_NeedsenumobjectInputOneOf_in_second(x)
7373
)
7474

75-
NeedsenumobjectInputTypeAdapter: TypeAdapter[Any] = TypeAdapter(NeedsenumobjectInput)
75+
NeedsenumobjectInputTypeAdapter: TypeAdapter[NeedsenumobjectInput] = TypeAdapter(
76+
NeedsenumobjectInput
77+
)
7678

7779

7880
class NeedsenumobjectOutputFooOneOf_out_first(BaseModel):
@@ -96,16 +98,18 @@ class NeedsenumobjectOutputFooOneOf_out_second(BaseModel):
9698
NeedsenumobjectOutputFoo = Annotated[
9799
NeedsenumobjectOutputFooOneOf_out_first
98100
| NeedsenumobjectOutputFooOneOf_out_second
99-
| RiverUnknownValue,
100-
WrapValidator(translate_unknown_value),
101+
| RiverUnknownError,
102+
WrapValidator(translate_unknown_error),
101103
]
102104

103105

104106
class NeedsenumobjectOutput(BaseModel):
105107
foo: Optional[NeedsenumobjectOutputFoo] = None
106108

107109

108-
NeedsenumobjectOutputTypeAdapter: TypeAdapter[Any] = TypeAdapter(NeedsenumobjectOutput)
110+
NeedsenumobjectOutputTypeAdapter: TypeAdapter[NeedsenumobjectOutput] = TypeAdapter(
111+
NeedsenumobjectOutput
112+
)
109113

110114

111115
class NeedsenumobjectErrorsFooAnyOf_0(RiverError):
@@ -119,13 +123,15 @@ class NeedsenumobjectErrorsFooAnyOf_1(RiverError):
119123
NeedsenumobjectErrorsFoo = Annotated[
120124
NeedsenumobjectErrorsFooAnyOf_0
121125
| NeedsenumobjectErrorsFooAnyOf_1
122-
| RiverUnknownValue,
123-
WrapValidator(translate_unknown_value),
126+
| RiverUnknownError,
127+
WrapValidator(translate_unknown_error),
124128
]
125129

126130

127131
class NeedsenumobjectErrors(RiverError):
128132
foo: Optional[NeedsenumobjectErrorsFoo] = None
129133

130134

131-
NeedsenumobjectErrorsTypeAdapter: TypeAdapter[Any] = TypeAdapter(NeedsenumobjectErrors)
135+
NeedsenumobjectErrorsTypeAdapter: TypeAdapter[NeedsenumobjectErrors] = TypeAdapter(
136+
NeedsenumobjectErrors
137+
)

tests/codegen/stream/generated/test_service/stream_method.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from pydantic import BaseModel, Field, TypeAdapter, WrapValidator
2121
from replit_river.error_schema import RiverError
22-
from replit_river.client import RiverUnknownValue, translate_unknown_value
22+
from replit_river.client import RiverUnknownError, translate_unknown_error
2323

2424
import replit_river as river
2525

@@ -39,11 +39,15 @@ class Stream_MethodInput(TypedDict):
3939
data: str
4040

4141

42-
Stream_MethodInputTypeAdapter: TypeAdapter[Any] = TypeAdapter(Stream_MethodInput)
42+
Stream_MethodInputTypeAdapter: TypeAdapter[Stream_MethodInput] = TypeAdapter(
43+
Stream_MethodInput
44+
)
4345

4446

4547
class Stream_MethodOutput(BaseModel):
4648
data: str
4749

4850

49-
Stream_MethodOutputTypeAdapter: TypeAdapter[Any] = TypeAdapter(Stream_MethodOutput)
51+
Stream_MethodOutputTypeAdapter: TypeAdapter[Stream_MethodOutput] = TypeAdapter(
52+
Stream_MethodOutput
53+
)

0 commit comments

Comments
 (0)