From 2edfed75ebf4e559c668aded9fb1f4de575b5c1a Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Sun, 14 Apr 2024 16:32:18 -0400 Subject: [PATCH] Add `MsgTypeError.expected_msg_type` Which matches with renaming `.payload_msg` -> `.expected_msg` which is the value we attempt to construct from a vanilla-msgppack decode-to-`dict` and then construct manually into a `MsgType` using `.msg.types.from_dict_msg()`. Add a todo to use new `use_pretty` flag which currently conflicts with `._exceptions.pformat_boxed_type()` prefix formatting.. --- tractor/_exceptions.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tractor/_exceptions.py b/tractor/_exceptions.py index 31b7b36..259994a 100644 --- a/tractor/_exceptions.py +++ b/tractor/_exceptions.py @@ -43,9 +43,12 @@ from tractor.msg import ( MsgType, Stop, Yield, - pretty_struct, types as msgtypes, ) +from tractor.msg.pretty_struct import ( + iter_fields, + Struct, +) if TYPE_CHECKING: from ._context import Context @@ -82,7 +85,7 @@ class InternalError(RuntimeError): _ipcmsg_keys: list[str] = [ fi.name for fi, k, v - in pretty_struct.iter_fields(Error) + in iter_fields(Error) ] @@ -321,7 +324,7 @@ class RemoteActorError(Exception): assert self.boxed_type is boxed_type @property - def ipc_msg(self) -> pretty_struct.Struct: + def ipc_msg(self) -> Struct: ''' Re-render the underlying `._ipc_msg: Msg` as a `pretty_struct.Struct` for introspection such that the @@ -334,12 +337,12 @@ class RemoteActorError(Exception): msg_type: MsgType = type(self._ipc_msg) fields: dict[str, Any] = { k: v for _, k, v in - pretty_struct.iter_fields(self._ipc_msg) + iter_fields(self._ipc_msg) } return defstruct( msg_type.__name__, fields=fields.keys(), - bases=(msg_type, pretty_struct.Struct), + bases=(msg_type, Struct), )(**fields) @property @@ -641,11 +644,11 @@ class MsgTypeError( ''' reprol_fields: list[str] = [ - 'payload_msg', + 'expected_msg_type', ] extra_body_fields: list[str] = [ 'cid', - 'payload_msg', + 'expected_msg', ] @property @@ -661,9 +664,7 @@ class MsgTypeError( return self.msgdata.get('_msg_dict') @property - def payload_msg( - self, - ) -> MsgType|None: + def expected_msg(self) -> MsgType|None: ''' Attempt to construct what would have been the original `MsgType`-with-payload subtype (i.e. an instance from the set @@ -674,9 +675,17 @@ class MsgTypeError( if msg_dict := self.msg_dict.copy(): return msgtypes.from_dict_msg( dict_msg=msg_dict, + # use_pretty=True, + # ^-TODO-^ would luv to use this BUT then the + # `field_prefix` in `pformat_boxed_tb()` cucks it + # all up.. XD ) return None + @property + def expected_msg_type(self) -> Type[MsgType]|None: + return type(self.expected_msg) + @property def cid(self) -> str: # pre-packed using `.from_decode()` constructor