Add pause/resume feed api, delegate to msg stream for broadcast api
parent
2f5abaa47a
commit
1e42f58478
|
@ -34,7 +34,7 @@ import trio
|
||||||
from trio.abc import ReceiveChannel
|
from trio.abc import ReceiveChannel
|
||||||
from trio_typing import TaskStatus
|
from trio_typing import TaskStatus
|
||||||
import tractor
|
import tractor
|
||||||
from tractor import _broadcast
|
# from tractor import _broadcast
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ..brokers import get_brokermod
|
from ..brokers import get_brokermod
|
||||||
|
@ -329,17 +329,22 @@ async def attach_feed_bus(
|
||||||
subs.append(sub)
|
subs.append(sub)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
uid = ctx.chan.uid
|
||||||
|
fqsn = f'{symbol}.{brokername}'
|
||||||
|
|
||||||
async for msg in stream:
|
async for msg in stream:
|
||||||
|
|
||||||
if msg == 'pause':
|
if msg == 'pause':
|
||||||
log.info(
|
if sub in subs:
|
||||||
f'Pausing {symbol}.{brokername} feed for {ctx.chan.uid}')
|
log.info(
|
||||||
subs.remove(sub)
|
f'Pausing {fqsn} feed for {uid}')
|
||||||
|
subs.remove(sub)
|
||||||
|
|
||||||
elif msg == 'resume':
|
elif msg == 'resume':
|
||||||
log.info(
|
if sub not in subs:
|
||||||
f'Resuming {symbol}.{brokername} feed for {ctx.chan.uid}')
|
log.info(
|
||||||
subs.append(sub)
|
f'Resuming {fqsn} feed for {uid}')
|
||||||
|
subs.append(sub)
|
||||||
else:
|
else:
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
finally:
|
finally:
|
||||||
|
@ -401,6 +406,12 @@ class Feed:
|
||||||
else:
|
else:
|
||||||
yield self._index_stream
|
yield self._index_stream
|
||||||
|
|
||||||
|
async def pause(self) -> None:
|
||||||
|
await self.stream.send('pause')
|
||||||
|
|
||||||
|
async def resume(self) -> None:
|
||||||
|
await self.stream.send('resume')
|
||||||
|
|
||||||
|
|
||||||
def sym_to_shm_key(
|
def sym_to_shm_key(
|
||||||
broker: str,
|
broker: str,
|
||||||
|
@ -493,16 +504,12 @@ async def open_feed(
|
||||||
readonly=True,
|
readonly=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
bstream = _broadcast.broadcast_receiver(
|
|
||||||
stream,
|
|
||||||
2**10,
|
|
||||||
)
|
|
||||||
feed = Feed(
|
feed = Feed(
|
||||||
name=brokername,
|
name=brokername,
|
||||||
shm=shm,
|
shm=shm,
|
||||||
mod=mod,
|
mod=mod,
|
||||||
first_quote=first_quote,
|
first_quote=first_quote,
|
||||||
stream=bstream, #brx_stream,
|
stream=stream,
|
||||||
_brokerd_portal=portal,
|
_brokerd_portal=portal,
|
||||||
)
|
)
|
||||||
ohlc_sample_rates = []
|
ohlc_sample_rates = []
|
||||||
|
@ -573,4 +580,4 @@ async def maybe_open_feed(
|
||||||
async with feed.stream.subscribe() as bstream:
|
async with feed.stream.subscribe() as bstream:
|
||||||
yield feed, bstream
|
yield feed, bstream
|
||||||
else:
|
else:
|
||||||
yield feed, stream
|
yield feed, feed.stream
|
||||||
|
|
Loading…
Reference in New Issue