pw_rpc: Fix __repr__ for UnaryResponse in Python client
UnaryResponse.__repr__ should only call proto_repr when it has a
response.
Fixes: b/247127597
Change-Id: Icdea31b50088669d1bded1eb21ec80c3b25f4590
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/110970
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Jonathon Reinhart <jrreinhart@google.com>
Reviewed-by: Carlos Chinchilla <cachinchilla@google.com>
diff --git a/pw_rpc/py/pw_rpc/callback_client/call.py b/pw_rpc/py/pw_rpc/callback_client/call.py
index abe1083..aba87f9 100644
--- a/pw_rpc/py/pw_rpc/callback_client/call.py
+++ b/pw_rpc/py/pw_rpc/callback_client/call.py
@@ -52,7 +52,8 @@
response: Any
def __repr__(self) -> str:
- return f'({self.status}, {proto_repr(self.response)})'
+ reply = proto_repr(self.response) if self.response else self.response
+ return f'({self.status}, {reply})'
class StreamResponse(NamedTuple):
diff --git a/pw_rpc/py/tests/callback_client_test.py b/pw_rpc/py/tests/callback_client_test.py
index b06939f..53d9030 100755
--- a/pw_rpc/py/tests/callback_client_test.py
+++ b/pw_rpc/py/tests/callback_client_test.py
@@ -401,6 +401,14 @@
self.assertEqual(context.exception.__cause__, exception)
+ def test_unary_response(self) -> None:
+ proto = self._protos.packages.pw.test1.SomeMessage(magic_number=123)
+ self.assertEqual(
+ repr(callback_client.UnaryResponse(Status.ABORTED, proto)),
+ '(Status.ABORTED, pw.test1.SomeMessage(magic_number=123))')
+ self.assertEqual(repr(callback_client.UnaryResponse(Status.OK, None)),
+ '(Status.OK, None)')
+
class ServerStreamingTest(_CallbackClientImplTestBase):
"""Tests for server streaming RPCs."""
@@ -965,6 +973,15 @@
self.assertIs(first_call.error, Status.CANCELLED)
self.assertFalse(second_call.completed())
+ def test_stream_response(self) -> None:
+ proto = self._protos.packages.pw.test1.SomeMessage(magic_number=123)
+ self.assertEqual(
+ repr(callback_client.StreamResponse(Status.ABORTED, [proto] * 2)),
+ '(Status.ABORTED, [pw.test1.SomeMessage(magic_number=123), '
+ 'pw.test1.SomeMessage(magic_number=123)])')
+ self.assertEqual(repr(callback_client.StreamResponse(Status.OK, [])),
+ '(Status.OK, [])')
+
if __name__ == '__main__':
unittest.main()