Support pub-sub of monitor's symbol selection
parent
3ed750d324
commit
152062ba8a
|
@ -178,8 +178,9 @@ def monitor(loglevel, broker, rate, name, dhost, test, tl):
|
||||||
|
|
||||||
tractor.run(
|
tractor.run(
|
||||||
partial(main, tries=1),
|
partial(main, tries=1),
|
||||||
name='kivy-monitor',
|
name='monitor',
|
||||||
loglevel=loglevel if tl else None,
|
loglevel=loglevel if tl else None,
|
||||||
|
rpc_module_paths=['piker.ui.monitor'],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@ from kivy import utils
|
||||||
from kivy.app import async_runTouchApp
|
from kivy.app import async_runTouchApp
|
||||||
from kivy.core.window import Window
|
from kivy.core.window import Window
|
||||||
from kivy.properties import BooleanProperty
|
from kivy.properties import BooleanProperty
|
||||||
from kivy.uix.behaviors import ButtonBehavior
|
|
||||||
|
|
||||||
from ..log import get_logger
|
from ..log import get_logger
|
||||||
from .pager import PagerView
|
from .pager import PagerView
|
||||||
|
@ -263,7 +262,7 @@ class BidAskLayout(StackLayout):
|
||||||
return [self.last, self.bid, self.ask]
|
return [self.last, self.bid, self.ask]
|
||||||
|
|
||||||
|
|
||||||
class Row(ButtonBehavior, HoverBehavior, GridLayout):
|
class Row(HoverBehavior, GridLayout):
|
||||||
"""A grid for displaying a row of ticker quote data.
|
"""A grid for displaying a row of ticker quote data.
|
||||||
"""
|
"""
|
||||||
def __init__(
|
def __init__(
|
||||||
|
@ -383,7 +382,7 @@ class Row(ButtonBehavior, HoverBehavior, GridLayout):
|
||||||
log.debug(
|
log.debug(
|
||||||
f"Entered row {self} through {self.border_point}")
|
f"Entered row {self} through {self.border_point}")
|
||||||
# don't highlight header row
|
# don't highlight header row
|
||||||
if getattr(self, 'is_header', None):
|
if self.is_header:
|
||||||
self.hovered = False
|
self.hovered = False
|
||||||
|
|
||||||
def on_leave(self):
|
def on_leave(self):
|
||||||
|
@ -394,6 +393,9 @@ class Row(ButtonBehavior, HoverBehavior, GridLayout):
|
||||||
|
|
||||||
def on_press(self, value=None):
|
def on_press(self, value=None):
|
||||||
log.info(f"Pressed row for {self._last_record['symbol']}")
|
log.info(f"Pressed row for {self._last_record['symbol']}")
|
||||||
|
if self.table and not self.is_header:
|
||||||
|
for q in self.table._click_queues:
|
||||||
|
q.put_nowait(self._last_record['symbol'])
|
||||||
|
|
||||||
|
|
||||||
class TickerTable(GridLayout):
|
class TickerTable(GridLayout):
|
||||||
|
@ -408,6 +410,7 @@ class TickerTable(GridLayout):
|
||||||
self._auto_sort = auto_sort
|
self._auto_sort = auto_sort
|
||||||
self._symbols2index = {}
|
self._symbols2index = {}
|
||||||
self._sorted = []
|
self._sorted = []
|
||||||
|
self._click_queues: List[trio.Queue] = []
|
||||||
|
|
||||||
def append_row(self, key, row):
|
def append_row(self, key, row):
|
||||||
"""Append a `Row` of `Cell` objects to this table.
|
"""Append a `Row` of `Cell` objects to this table.
|
||||||
|
@ -596,6 +599,21 @@ async def update_quotes(
|
||||||
# nursery.cancel_scope.cancel()
|
# nursery.cancel_scope.cancel()
|
||||||
|
|
||||||
|
|
||||||
|
async def stream_symbol_selection():
|
||||||
|
"""An RPC async gen for streaming the symbol corresponding
|
||||||
|
value corresponding to the last clicked row.
|
||||||
|
"""
|
||||||
|
widgets = tractor.current_actor().statespace['widgets']
|
||||||
|
table = widgets['table']
|
||||||
|
q = trio.Queue(1)
|
||||||
|
table._click_queues.append(q)
|
||||||
|
try:
|
||||||
|
async for symbol in q:
|
||||||
|
yield symbol
|
||||||
|
finally:
|
||||||
|
table._click_queues.remove(q)
|
||||||
|
|
||||||
|
|
||||||
async def _async_main(
|
async def _async_main(
|
||||||
name: str,
|
name: str,
|
||||||
portal: tractor._portal.Portal,
|
portal: tractor._portal.Portal,
|
||||||
|
|
Loading…
Reference in New Issue