diff options
author | Lars Wirzenius <liw@liw.fi> | 2015-10-17 18:15:30 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2015-10-17 18:19:24 +0300 |
commit | 242462fb7aed3305399ef2edd53a2db14c6e8ea2 (patch) | |
tree | 031db2251dcf527e0f03a7d8f11e58bd08c357ed | |
parent | 6e1263591b6dcf6451c457f27a64d497d5b26437 (diff) | |
download | python-ttystatus-242462fb7aed3305399ef2edd53a2db14c6e8ea2.tar.gz |
Precompute interests
Rather than querying each method if it's interested in a variable,
remember which widgets are interested in which variables.
-rw-r--r-- | ttystatus/status.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/ttystatus/status.py b/ttystatus/status.py index 09e0e9f..1760f8a 100644 --- a/ttystatus/status.py +++ b/ttystatus/status.py @@ -46,8 +46,16 @@ class TerminalStatus(object): if not self._widget_rows: self._widget_rows = [[]] self._widget_rows[-1].append(widget) - if not hasattr(widget, 'interested_in'): - widget.interested_in = None + self._register_interests(widget) + + def _register_interests(self, widget): + if getattr(widget, 'interested_in', None) is None: + self._unknown_interest.append(widget) + else: + for key in widget.interested_in: + widgets = self._interested_in.get(key, []) + widgets.append(widget) + self._interested_in[key] = widgets def start_new_line(self): # pragma: no cover '''Start a new line of widgets.''' @@ -83,6 +91,7 @@ class TerminalStatus(object): self._widget_rows = [] self._values = {} self._interested_in = {} + self._unknown_interest = [] self._m.clear() def __getitem__(self, key): @@ -96,10 +105,13 @@ class TerminalStatus(object): def __setitem__(self, key, value): '''Set value for key.''' self._values[key] = value - for row in self._widget_rows: - for w in row: - if w.interested_in is None or key in w.interested_in: - w.update(self) + widget_lists = [ + self._interested_in.get(key, []), + self._unknown_interest, + ] + for widgets in widget_lists: + for w in widgets: + w.update(self) if self._m.enabled and self._m.time_to_write(): self._write() |