Skip to content

Commit 5a88a0e

Browse files
committed
fix(proto-plus): add context to TypeErrors during message manipulation
1 parent 247e2ad commit 5a88a0e

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

packages/proto-plus/proto/message.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,13 @@ def __init__(
680680
params[key] = pb_value
681681

682682
# Create the internal protocol buffer.
683-
super().__setattr__("_pb", self._meta.pb(**params))
683+
try:
684+
super().__setattr__("_pb", self._meta.pb(**params))
685+
except TypeError as ex:
686+
raise TypeError(
687+
f"Failed to initialize {self.__class__.__name__} due to invalid type "
688+
f"or structure in parameters. Underlying error: {ex}"
689+
) from ex
684690

685691
def _get_pb_type_from_key(self, key):
686692
"""Given a key, return the corresponding pb_type.
@@ -861,7 +867,14 @@ def __setattr__(self, key, value):
861867

862868
# Merge in the value being set.
863869
if pb_value is not None:
864-
self._pb.MergeFrom(self._meta.pb(**{key: pb_value}))
870+
try:
871+
self._pb.MergeFrom(self._meta.pb(**{key: pb_value}))
872+
except TypeError as ex:
873+
raise TypeError(
874+
f"Failed to set field '{key}' on {self.__class__.__name__} with value {value!r}. "
875+
f"Underlying error: {ex}"
876+
) from ex
877+
865878

866879
def __getstate__(self):
867880
"""Serialize for pickling."""

0 commit comments

Comments
 (0)