From d12ec797378a89923c2716fce2ee09a7911580e2 Mon Sep 17 00:00:00 2001 From: Peter Zhong Date: Mon, 14 Jul 2025 23:55:27 +0000 Subject: [PATCH 1/2] useless code gen --- src/replit_river/codegen/client.py | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/replit_river/codegen/client.py b/src/replit_river/codegen/client.py index 9115b64f..51fbf3dc 100644 --- a/src/replit_river/codegen/client.py +++ b/src/replit_river/codegen/client.py @@ -514,25 +514,6 @@ def extract_props(tpe: RiverType) -> list[dict[str, RiverType]]: in_module, permit_unknown_members=permit_unknown_members, ) - # TODO(dstewart): This structure changed since we were incorrectly leaking - # ListTypeExprs into codegen. This generated code is - # probably wrong. - match type_name: - case ListTypeExpr(inner_type_name): - typeddict_encoder.append( - f"encode_{render_literal_type(inner_type_name)}(x)" - ) - case DictTypeExpr(_): - raise ValueError( - "What does it mean to try and encode a dict in this position?" - ) - case LiteralTypeExpr(const): - typeddict_encoder.append(repr(const)) - case TypeName(value): - typeddict_encoder.append(f"encode_{value}(x)") - case other: - _o1: NoneTypeExpr | OpenUnionTypeExpr | UnionTypeExpr = other - raise ValueError(f"What does it mean to have {_o1} here?") return (DictTypeExpr(type_name), module_info, type_chunks, encoder_names) assert type.type == "object", type.type From 52cc7aaf5c788bbd93b1a37ee1332cc9d3a2ef5c Mon Sep 17 00:00:00 2001 From: Peter Zhong Date: Thu, 17 Jul 2025 00:18:30 +0000 Subject: [PATCH 2/2] thread through errors --- src/replit_river/client_session.py | 12 ++++++++++-- src/replit_river/error_schema.py | 8 +++++++- src/replit_river/v2/session.py | 12 ++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/replit_river/client_session.py b/src/replit_river/client_session.py index ef535ee3..ed498847 100644 --- a/src/replit_river/client_session.py +++ b/src/replit_river/client_session.py @@ -252,7 +252,11 @@ async def send_rpc( except Exception as e: raise RiverException("error_deserializer", str(e)) from e raise exception_from_message(error.code)( - error.code, error.message, service_name, procedure_name + error.code, + error.message, + service_name, + procedure_name, + underlying_error=error, ) return response_deserializer(response["payload"]) except RiverException as e: @@ -338,7 +342,11 @@ async def send_upload( except Exception as e: raise RiverException("error_deserializer", str(e)) from e raise exception_from_message(error.code)( - error.code, error.message, service_name, procedure_name + error.code, + error.message, + service_name, + procedure_name, + underlying_error=error, ) return response_deserializer(response["payload"]) diff --git a/src/replit_river/error_schema.py b/src/replit_river/error_schema.py index 94a6789a..d6a316c1 100644 --- a/src/replit_river/error_schema.py +++ b/src/replit_river/error_schema.py @@ -51,12 +51,18 @@ class RiverServiceException(RiverException): """Exception raised by river as a result of a fault in the service running river.""" def __init__( - self, code: str, message: str, service: str | None, procedure: str | None + self, + code: str, + message: str, + service: str | None, + procedure: str | None, + underlying_error: RiverError | None = None, ) -> None: self.code = code self.message = message self.service = service self.procedure = procedure + self.underlying_error = underlying_error service = service or "N/A" procedure = procedure or "N/A" msg = ( diff --git a/src/replit_river/v2/session.py b/src/replit_river/v2/session.py index 9d8ce129..f7bfe4ed 100644 --- a/src/replit_river/v2/session.py +++ b/src/replit_river/v2/session.py @@ -790,7 +790,11 @@ async def send_rpc[R, A]( except Exception as e: raise RiverException("error_deserializer", str(e)) from e raise exception_from_message(error.code)( - error.code, error.message, service_name, procedure_name + error.code, + error.message, + service_name, + procedure_name, + underlying_error=error, ) return response_deserializer(result["payload"]) @@ -899,7 +903,11 @@ async def send_upload[I, R, A]( except Exception as e: raise RiverException("error_deserializer", str(e)) from e raise exception_from_message(error.code)( - error.code, error.message, service_name, procedure_name + error.code, + error.message, + service_name, + procedure_name, + underlying_error=error, ) return response_deserializer(result["payload"])