forked from goodboy/tractor
1
0
Fork 0

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`.
mv_to_new_trio_py3.11
Tyler Goodlet 2024-03-19 14:20:59 -04:00
parent 5fb5682269
commit 78434f6317
1 changed files with 13 additions and 39 deletions

View File

@ -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,
)