forked from goodboy/tractor
Dump `.msgdata` in `RemoteActorError.__repr__()`
parent
022bf8ce75
commit
2e81ccf5b4
|
@ -20,6 +20,7 @@ Our classy exception set.
|
||||||
"""
|
"""
|
||||||
import builtins
|
import builtins
|
||||||
import importlib
|
import importlib
|
||||||
|
from pprint import pformat
|
||||||
from typing import (
|
from typing import (
|
||||||
Any,
|
Any,
|
||||||
Type,
|
Type,
|
||||||
|
@ -38,12 +39,17 @@ class ActorFailure(Exception):
|
||||||
"General actor failure"
|
"General actor failure"
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: rename to just `RemoteError`?
|
||||||
class RemoteActorError(Exception):
|
class RemoteActorError(Exception):
|
||||||
'''
|
'''
|
||||||
Remote actor exception bundled locally
|
A box(ing) type which bundles a remote actor `BaseException` for
|
||||||
|
(near identical, and only if possible,) local object/instance
|
||||||
|
re-construction in the local process memory domain.
|
||||||
|
|
||||||
|
Normally each instance is expected to be constructed from
|
||||||
|
a special "error" IPC msg sent by some remote actor-runtime.
|
||||||
|
|
||||||
'''
|
'''
|
||||||
# TODO: local recontruction of remote exception deats
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
message: str,
|
message: str,
|
||||||
|
@ -53,13 +59,36 @@ class RemoteActorError(Exception):
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(message)
|
super().__init__(message)
|
||||||
|
|
||||||
self.type = suberror_type
|
# TODO: maybe a better name?
|
||||||
self.msgdata = msgdata
|
# - .errtype
|
||||||
|
# - .retype
|
||||||
|
# - .boxed_errtype
|
||||||
|
# - .boxed_type
|
||||||
|
# - .remote_type
|
||||||
|
# also pertains to our long long oustanding issue XD
|
||||||
|
# https://github.com/goodboy/tractor/issues/5
|
||||||
|
self.type: str = suberror_type
|
||||||
|
self.msgdata: dict[str, Any] = msgdata
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def src_actor_uid(self) -> tuple[str, str] | None:
|
def src_actor_uid(self) -> tuple[str, str] | None:
|
||||||
return self.msgdata.get('src_actor_uid')
|
return self.msgdata.get('src_actor_uid')
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
if remote_tb := self.msgdata.get('tb_str'):
|
||||||
|
pformat(remote_tb)
|
||||||
|
return (
|
||||||
|
f'{type(self).__name__}(\n'
|
||||||
|
f'msgdata={pformat(self.msgdata)}\n'
|
||||||
|
')'
|
||||||
|
)
|
||||||
|
|
||||||
|
return super().__repr__(self)
|
||||||
|
|
||||||
|
# TODO: local recontruction of remote exception deats
|
||||||
|
# def unbox(self) -> BaseException:
|
||||||
|
# ...
|
||||||
|
|
||||||
|
|
||||||
class InternalActorError(RemoteActorError):
|
class InternalActorError(RemoteActorError):
|
||||||
'''
|
'''
|
||||||
|
|
Loading…
Reference in New Issue