From 78434f631729dfb20ba6895d83d0270e6a479abd Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Tue, 19 Mar 2024 14:20:59 -0400 Subject: [PATCH] Fix `.boxed_type` facepalm, drop `.src_actor_uid` The misname of `._boxed_type` as `._src_type` was only manifesting as a reallly strange boxing error with a packed exception-group, not sure how or why only that but it's fixed now XD Start refining/cleaning out stuff for sure we don't need (based on multiple local test runs): - discard `.src_actor_uid` fully since test set has been moved over to `.src_uid`; this means also removing the `.msgdata` insertion from `pack_error()`; a patch to all internals is coming next obvi! - don't pass `boxed_type` to `RemoteActorError.__init__()` from `unpack_error()` since it's now set directly via the `.msgdata["boxed_type_str"]`/`error_msg: dict` input , but in the case where **it is passed as an arg** (only for ctxc in `._rpc._invoke()` rn) make sure we only do the `.__init__()` insert when `boxed_type is not None`. --- tractor/_exceptions.py | 52 +++++++++++------------------------------- 1 file changed, 13 insertions(+), 39 deletions(-) diff --git a/tractor/_exceptions.py b/tractor/_exceptions.py index d6629ad..b28a4a7 100644 --- a/tractor/_exceptions.py +++ b/tractor/_exceptions.py @@ -109,7 +109,6 @@ class RemoteActorError(Exception): ''' reprol_fields: list[str] = [ - # 'src_actor_uid', 'src_uid', 'relay_path', # 'relay_uid', @@ -143,9 +142,6 @@ class RemoteActorError(Exception): # pre-`return` lines? # sanity on inceptions if boxed_type is RemoteActorError: - if self.src_type_str == 'RemoteActorError': - import pdbp; pdbp.set_trace() - assert self.src_type_str != 'RemoteActorError' assert self.src_uid not in self.relay_path @@ -158,7 +154,7 @@ class RemoteActorError(Exception): # should better emphasize that special (one off?) case # either by customizing `ContextCancelled.__init__()` or # through a special factor func? - else: + elif boxed_type: if not self.msgdata.get('boxed_type_str'): self.msgdata['boxed_type_str'] = str( type(boxed_type).__name__ @@ -206,7 +202,7 @@ class RemoteActorError(Exception): ''' if self._boxed_type is None: - self._src_type = get_err_type( + self._boxed_type = get_err_type( self.msgdata['boxed_type_str'] ) @@ -235,9 +231,6 @@ class RemoteActorError(Exception): def src_uid(self) -> tuple[str, str]|None: if src_uid := ( self.msgdata.get('src_uid') - # TODO: remove! - or - self.msgdata.get('src_actor_uid') ): return tuple(src_uid) # TODO: use path lookup instead? @@ -245,12 +238,6 @@ class RemoteActorError(Exception): # self.msgdata['relay_path'][0] # ) - # TODO: deprecate this for ^! - @property - def src_actor_uid(self) -> tuple[str, str]|None: - log.warning('.src_actor_uid` is deprecated, use `.src_uid` instead!') - return self.src_uid - @property def tb_str( self, @@ -517,7 +504,8 @@ def pack_error( # an onion/inception we need to pack if ( type(exc) is RemoteActorError - and exc.boxed_type != RemoteActorError + and (boxed := exc.boxed_type) + and boxed != RemoteActorError ): # sanity on source error (if needed when tweaking this) assert (src_type := exc.src_type) != RemoteActorError @@ -536,13 +524,6 @@ def pack_error( # the input `exc` type. error_msg['boxed_type_str'] = 'RemoteActorError' - # import pdbp; pdbp.set_trace() - # log.debug( - # 'INCEPTION packing!\n\n' - # f'{pformat(exc.msgdata)}\n\n' - # f'{exc}\n' - # ) - else: error_msg['src_uid'] = our_uid error_msg['src_type_str'] = type(exc).__name__ @@ -566,6 +547,7 @@ def unpack_error( chan: Channel|None = None, box_type: RemoteActorError = RemoteActorError, + hide_tb: bool = True, ) -> None|Exception: @@ -593,15 +575,15 @@ def unpack_error( + tb_str ) - boxed_type_str: str = ( - # TODO: deprecate this! - error_dict.get('boxed_type_str') - # or error_dict['boxed_type'] - ) - boxed_type: Type[BaseException] = Exception + + # try to lookup a suitable error type from the local runtime + # env then use it to construct a local instance. + boxed_type_str: str = error_dict['boxed_type_str'] + boxed_type: Type[BaseException] = get_err_type(boxed_type_str) if boxed_type_str == 'ContextCancelled': - boxed_type = box_type = ContextCancelled + box_type = ContextCancelled + assert boxed_type is box_type # TODO: already included by `_this_mod` in else loop right? # @@ -609,19 +591,11 @@ def unpack_error( # we include the relay_path info and the # original source error. elif boxed_type_str == 'RemoteActorError': - boxed_type = RemoteActorError + assert boxed_type is RemoteActorError assert len(error_dict['relay_path']) >= 1 - # try to lookup a suitable error type - # from the local runtime env. - else: - boxed_type = get_err_type(boxed_type_str) - exc = box_type( message, - boxed_type=boxed_type, - - # unpack other fields into error type init **error_dict, )