Support both input msg-sequence types

The legacy version was a `dict` of `dicts` vs. now we want to be handed
a `list[FeedInit]`; process both in a factored way.

Drop `FeedInit.bs_mktid` since it's already defined on `.mkt.bs_mktid`
and we don't really need it top level.
rekt_pps
Tyler Goodlet 2023-04-19 13:14:33 -04:00
parent b4f2f49001
commit 765b8f8e5c
1 changed files with 26 additions and 16 deletions

View File

@ -48,8 +48,6 @@ class FeedInit(Struct, frozen=True):
from each backend broker/data provider.
'''
# backend specific, market endpoint id
bs_mktid: str
mkt_info: MktPair
shm_write_opts: dict[str, Any] | None = None
@ -70,13 +68,21 @@ def validate_backend(
that haven't been implemented by this backend yet.
'''
if isinstance(init_msgs, dict):
for i, (sym_str, msg) in enumerate(init_msgs.items()):
init: FeedInit | dict[str, Any] = msg
inits: list[
FeedInit | dict[str, Any]
] = init_msgs
# XXX: eventually this WILL NOT necessarily be true.
if i > 0:
assert not len(init_msgs) == 1
# convert to list if from old dict-style
if isinstance(init_msgs, dict):
inits = list(init_msgs.values())
init: FeedInit | dict[str, Any]
for i, init in enumerate(inits):
# XXX: eventually this WILL NOT necessarily be true.
if i > 0:
assert not len(init_msgs) == 1
if isinstance(init_msgs, dict):
keys: set = set(init_msgs.keys()) - set(syms)
raise FeedInitializationError(
'TOO MANY INIT MSGS!\n'
@ -84,6 +90,11 @@ def validate_backend(
'ALL MSGS:\n'
f'{pformat(init_msgs)}\n'
)
else:
raise FeedInitializationError(
'TOO MANY INIT MSGS!\n'
f'{pformat(init_msgs)}\n'
)
# TODO: once all backends are updated we can remove this branching.
rx_msg: bool = False
@ -104,7 +115,6 @@ def validate_backend(
rx_msg = True
# verify feed init state / schema
bs_mktid: str # backend specific (unique) market id
bs_fqme: str # backend specific fqme
mkt: MktPair
@ -157,14 +167,15 @@ def validate_backend(
)
case FeedInit(
# bs_mktid=bs_mktid,
mkt_info=MktPair(dst=Asset()) as mkt,
shm_write_opts=dict(),
shm_write_opts=dict(shm_opts),
) as init:
name: str = mod.name
log.info(
f'NICE JOB {mod.name} BACKEND!\n'
'You are fully up to API spec B):\n'
f'{init.to_dict()}'
f'NICE JOB {name} BACKEND being fully up to API spec B)\n'
f"{name}'s `MktPair` info:\n"
f'{pformat(mkt.to_dict())}\n'
f'shm conf: {pformat(shm_opts)}\n'
)
case _:
@ -172,15 +183,14 @@ def validate_backend(
# build a msg if we received a dict for input.
if not rx_msg:
assert bs_fqme in mkt.fqme
init = FeedInit(
bs_mktid=mkt.bs_mktid,
mkt_info=mkt,
shm_write_opts=init.get('shm_write_opts'),
)
# `MktPair` value audits
mkt = init.mkt_info
assert bs_fqme in mkt.fqme
assert mkt.type_key
# `MktPair` wish list