forked from goodboy/tractor
				
			Drop `msg.types.Msg` for new replacement types
The `TypeAlias` for the msg type-group is now `MsgType` and any user touching shuttle messages can now be typed as `PayloadMsg`. Relatedly, add MTE specific `Error._bad_msg[_as_dict]` fields which are handy for introspection of remote decode failures.remotes/1757153874605917753/main
							parent
							
								
									a520951928
								
							
						
					
					
						commit
						eaddde94c5
					
				|  | @ -291,7 +291,7 @@ class MsgpackTCPStream(MsgTransport): | |||
| 
 | ||||
|     async def send( | ||||
|         self, | ||||
|         msg: msgtypes.Msg, | ||||
|         msg: msgtypes.MsgType, | ||||
| 
 | ||||
|         strict_types: bool = True, | ||||
|         # hide_tb: bool = False, | ||||
|  |  | |||
|  | @ -140,7 +140,7 @@ class MsgDec(Struct): | |||
|     #      * also a `.__contains__()` for doing `None in | ||||
|     #      TypeSpec[None|int]` since rn you need to do it on | ||||
|     #      `.__args__` for unions.. | ||||
|     #     - `MsgSpec: Union[Type[Msg]] | ||||
|     #     - `MsgSpec: Union[MsgType] | ||||
|     # | ||||
|     # -[ ] auto-genning this from new (in 3.12) type parameter lists Bo | ||||
|     # |_ https://docs.python.org/3/reference/compound_stmts.html#type-params | ||||
|  | @ -188,7 +188,7 @@ def mk_dec( | |||
| 
 | ||||
|     return MsgDec( | ||||
|         _dec=msgpack.Decoder( | ||||
|             type=spec,  # like `Msg[Any]` | ||||
|             type=spec,  # like `MsgType[Any]` | ||||
|             dec_hook=dec_hook, | ||||
|         ) | ||||
|     ) | ||||
|  | @ -561,7 +561,7 @@ def mk_codec( | |||
| 
 | ||||
|     ''' | ||||
|     # (manually) generate a msg-payload-spec for all relevant | ||||
|     # god-boxing-msg subtypes, parameterizing the `Msg.pld: PayloadT` | ||||
|     # god-boxing-msg subtypes, parameterizing the `PayloadMsg.pld: PayloadT` | ||||
|     # for the decoder such that all sub-type msgs in our SCIPP | ||||
|     # will automatically decode to a type-"limited" payload (`Struct`) | ||||
|     # object (set). | ||||
|  | @ -607,7 +607,7 @@ _def_msgspec_codec: MsgCodec = mk_codec(ipc_pld_spec=Any) | |||
| 
 | ||||
| # The built-in IPC `Msg` spec. | ||||
| # Our composing "shuttle" protocol which allows `tractor`-app code | ||||
| # to use any `msgspec` supported type as the `Msg.pld` payload, | ||||
| # to use any `msgspec` supported type as the `PayloadMsg.pld` payload, | ||||
| # https://jcristharif.com/msgspec/supported-types.html | ||||
| # | ||||
| _def_tractor_codec: MsgCodec = mk_codec( | ||||
|  | @ -743,7 +743,7 @@ def limit_msg_spec( | |||
| ) -> MsgCodec: | ||||
|     ''' | ||||
|     Apply a `MsgCodec` that will natively decode the SC-msg set's | ||||
|     `Msg.pld: Union[Type[Struct]]` payload fields using | ||||
|     `PayloadMsg.pld: Union[Type[Struct]]` payload fields using | ||||
|     tagged-unions of `msgspec.Struct`s from the `payload_types` | ||||
|     for all IPC contexts in use by the current `trio.Task`. | ||||
| 
 | ||||
|  |  | |||
|  | @ -89,11 +89,12 @@ class PayloadMsg( | |||
|     # -[ ] `uuid.UUID` which has multi-protocol support | ||||
|     #  https://jcristharif.com/msgspec/supported-types.html#uuid | ||||
| 
 | ||||
|     # The msgs "payload" (spelled without vowels): | ||||
|     # The msg's "payload" (spelled without vowels): | ||||
|     # https://en.wikipedia.org/wiki/Payload_(computing) | ||||
|     # | ||||
|     # NOTE: inherited from any `Msg` (and maybe overriden | ||||
|     # by use of `limit_msg_spec()`), but by default is | ||||
|     pld: Raw | ||||
| 
 | ||||
|     # ^-NOTE-^ inherited from any `PayloadMsg` (and maybe type | ||||
|     # overriden via the `._ops.limit_plds()` API), but by default is | ||||
|     # parameterized to be `Any`. | ||||
|     # | ||||
|     # XXX this `Union` must strictly NOT contain `Any` if | ||||
|  | @ -106,7 +107,6 @@ class PayloadMsg( | |||
|     # TODO: could also be set to `msgspec.Raw` if the sub-decoders | ||||
|     # approach is preferred over the generic parameterization  | ||||
|     # approach as take by `mk_msg_spec()` below. | ||||
|     pld: Raw | ||||
| 
 | ||||
| 
 | ||||
| # TODO: complete rename | ||||
|  | @ -412,19 +412,24 @@ class Error( | |||
|     relay_path: list[tuple[str, str]] | ||||
|     tb_str: str | ||||
| 
 | ||||
|     cid: str|None = None | ||||
| 
 | ||||
|     # TODO: use UNSET or don't include them via | ||||
|     # TODO: only optionally include sub-type specfic fields? | ||||
|     # -[ ] use UNSET or don't include them via `omit_defaults` (see | ||||
|     #      inheritance-line options above) | ||||
|     # | ||||
|     # `ContextCancelled` | ||||
|     # `ContextCancelled` reports the src cancelling `Actor.uid` | ||||
|     canceller: tuple[str, str]|None = None | ||||
| 
 | ||||
|     # `StreamOverrun` | ||||
|     # `StreamOverrun`-specific src `Actor.uid` | ||||
|     sender: tuple[str, str]|None = None | ||||
| 
 | ||||
|     # for the `MsgTypeError` case where the receiver side | ||||
|     # decodes the underlying original `Msg`-subtype | ||||
|     _msg_dict: dict|None = None | ||||
|     # `MsgTypeError` meta-data | ||||
|     cid: str|None = None | ||||
|     # when the receiver side fails to decode a delivered | ||||
|     # `PayloadMsg`-subtype; one and/or both the msg-struct instance | ||||
|     # and `Any`-decoded to `dict` of the msg are set and relayed | ||||
|     # (back to the sender) for introspection. | ||||
|     _bad_msg: Started|Yield|Return|None = None | ||||
|     _bad_msg_as_dict: dict|None = None | ||||
| 
 | ||||
| 
 | ||||
| def from_dict_msg( | ||||
|  | @ -436,9 +441,11 @@ def from_dict_msg( | |||
| 
 | ||||
| ) -> MsgType: | ||||
|     ''' | ||||
|     Helper to build a specific `MsgType` struct from | ||||
|     a "vanilla" decoded `dict`-ified equivalent of the | ||||
|     msg: i.e. if the `msgpack.Decoder.type == Any`. | ||||
|     Helper to build a specific `MsgType` struct from a "vanilla" | ||||
|     decoded `dict`-ified equivalent of the msg: i.e. if the | ||||
|     `msgpack.Decoder.type == Any`, the default when using | ||||
|     `msgspec.msgpack` and not "typed decoding" using | ||||
|     `msgspec.Struct`. | ||||
| 
 | ||||
|     ''' | ||||
|     msg_type_tag_field: str = ( | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue