Handle no sampler subs case on history broadcasts

When the market isn't open the feed layer won't create a subscriber
entry in the sampler broadcast loop and so if a manual call to
``broadcast()`` is made (like when trying to update a chart from
a history prepend) we need to handle that case and just broadcast
a random `-1` for now..BD
incr_update_backup
Tyler Goodlet 2022-05-03 13:52:23 -04:00
parent e8aaf42cc6
commit 468cd3a381
1 changed files with 11 additions and 3 deletions

View File

@ -146,13 +146,21 @@ async def broadcast(
# a given sample period. # a given sample period.
subs = sampler.subscribers.get(delay_s, ()) subs = sampler.subscribers.get(delay_s, ())
last = -1
if shm is None: if shm is None:
lowest = min(sampler.ohlcv_shms.keys()) periods = sampler.ohlcv_shms.keys()
# if this is an update triggered by a history update there
# might not actually be any sampling bus setup since there's
# no "live feed" active yet.
if periods:
lowest = min(periods)
shm = sampler.ohlcv_shms[lowest][0] shm = sampler.ohlcv_shms[lowest][0]
last = shm._last.value
for stream in subs: for stream in subs:
try: try:
await stream.send({'index': shm._last.value}) await stream.send({'index': last})
except ( except (
trio.BrokenResourceError, trio.BrokenResourceError,
trio.ClosedResourceError trio.ClosedResourceError