diff options
author | Lars Wirzenius <liw@liw.fi> | 2010-07-07 08:41:18 +1200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2010-07-07 08:41:18 +1200 |
commit | c6071c10b8859f09f9cc7f0949d2fd7e3ad2d9c0 (patch) | |
tree | 84c3df7cadc9f6527735ef5c60e03f06c68c78fc | |
parent | b15fcce5b6d2046e3419b3201e38667554de53fd (diff) | |
download | python-ttystatus-c6071c10b8859f09f9cc7f0949d2fd7e3ad2d9c0.tar.gz |
Speed things up further by pre-computing which widgets are interested in which key.
-rw-r--r-- | ttystatus/bytesize.py | 2 | ||||
-rw-r--r-- | ttystatus/counter.py | 2 | ||||
-rw-r--r-- | ttystatus/elapsed.py | 2 | ||||
-rw-r--r-- | ttystatus/index.py | 2 | ||||
-rw-r--r-- | ttystatus/literal.py | 2 | ||||
-rw-r--r-- | ttystatus/pathname.py | 2 | ||||
-rw-r--r-- | ttystatus/percent.py | 2 | ||||
-rw-r--r-- | ttystatus/progressbar.py | 2 | ||||
-rw-r--r-- | ttystatus/remtime.py | 2 | ||||
-rw-r--r-- | ttystatus/status.py | 10 | ||||
-rw-r--r-- | ttystatus/string.py | 2 | ||||
-rw-r--r-- | ttystatus/widget.py | 7 |
12 files changed, 19 insertions, 18 deletions
diff --git a/ttystatus/bytesize.py b/ttystatus/bytesize.py index 3a2e88f..56c6d4c 100644 --- a/ttystatus/bytesize.py +++ b/ttystatus/bytesize.py @@ -24,7 +24,7 @@ class ByteSize(ttystatus.Widget): def __init__(self, name): self.name = name self.value = self.format(0) - self.interesting_keys = set([name]) + self.interesting_keys = [name] def format(self, bytes): units = ( diff --git a/ttystatus/counter.py b/ttystatus/counter.py index a401d8d..770b5e7 100644 --- a/ttystatus/counter.py +++ b/ttystatus/counter.py @@ -26,7 +26,7 @@ class Counter(ttystatus.Widget): self.prev = None self.count = 0 self.value = '0' - self.interesting_keys = set([name]) + self.interesting_keys = [name] def update(self, master, width): if master[self.name] != self.prev: diff --git a/ttystatus/elapsed.py b/ttystatus/elapsed.py index 1e14ecf..c9bfc42 100644 --- a/ttystatus/elapsed.py +++ b/ttystatus/elapsed.py @@ -26,7 +26,7 @@ class ElapsedTime(ttystatus.Widget): def __init__(self): self.started = None self.value = self.format(0) - self.interesting_keys = set() + self.interesting_keys = [] def get_time(self): # pragma: no cover '''Wrapper around time.time() for unit tests to override.''' diff --git a/ttystatus/index.py b/ttystatus/index.py index f402bea..a9e1541 100644 --- a/ttystatus/index.py +++ b/ttystatus/index.py @@ -25,7 +25,7 @@ class Index(ttystatus.Widget): self.name = name self.listname = listname self.value = self.format(0, 0) - self.interesting_keys = set([name, listname]) + self.interesting_keys = [name, listname] def format(self, index, listlen): return '%d/%d' % (index, listlen) diff --git a/ttystatus/literal.py b/ttystatus/literal.py index 5ccfdf2..a1ffa18 100644 --- a/ttystatus/literal.py +++ b/ttystatus/literal.py @@ -23,5 +23,5 @@ class Literal(ttystatus.Widget): def __init__(self, string): self.value = string - self.interesting_keys = set() + self.interesting_keys = [] diff --git a/ttystatus/pathname.py b/ttystatus/pathname.py index 6933d03..9cf3971 100644 --- a/ttystatus/pathname.py +++ b/ttystatus/pathname.py @@ -27,7 +27,7 @@ class Pathname(ttystatus.Widget): def __init__(self, key): self._key = key - self.interesting_keys = set([key]) + self.interesting_keys = [key] def update(self, master, width): v = master.get(self._key, '') diff --git a/ttystatus/percent.py b/ttystatus/percent.py index b06d070..fec0dfc 100644 --- a/ttystatus/percent.py +++ b/ttystatus/percent.py @@ -26,7 +26,7 @@ class PercentDone(ttystatus.Widget): self.total_name = total_name self.decimals = decimals self.value = self.format(0, 1) - self.interesting_keys = set([done_name, total_name]) + self.interesting_keys = [done_name, total_name] def format(self, done, total): try: diff --git a/ttystatus/progressbar.py b/ttystatus/progressbar.py index 52a2b11..ac44eb1 100644 --- a/ttystatus/progressbar.py +++ b/ttystatus/progressbar.py @@ -24,7 +24,7 @@ class ProgressBar(ttystatus.Widget): def __init__(self, done_name, total_name): self.done_name = done_name self.total_name = total_name - self.interesting_keys = set([done_name, total_name]) + self.interesting_keys = [done_name, total_name] def update(self, master, width): done = float(master.get(self.done_name, 0)) diff --git a/ttystatus/remtime.py b/ttystatus/remtime.py index 7602e54..e2ee684 100644 --- a/ttystatus/remtime.py +++ b/ttystatus/remtime.py @@ -29,7 +29,7 @@ class RemainingTime(ttystatus.Widget): self.started = None self.default = '--h--m--s' self.value = self.default - self.interesting_keys = set([done_name, total_name]) + self.interesting_keys = [done_name, total_name] def get_time(self): # pragma: no cover '''Return current time. diff --git a/ttystatus/status.py b/ttystatus/status.py index 012014a..d7d8ef4 100644 --- a/ttystatus/status.py +++ b/ttystatus/status.py @@ -37,11 +37,14 @@ class TerminalStatus(object): def add(self, widget): '''Add a new widget to the status display.''' self._widgets.append(widget) + for key in widget.interesting_keys: + self._interests[key] = self._interests.get(key, []) + [widget] def clear(self): '''Remove all widgets.''' self._widgets = [] self._values = dict() + self._interests = dict() self._m.clear() def __getitem__(self, key): @@ -56,10 +59,9 @@ class TerminalStatus(object): '''Set value for key.''' self._values[key] = value width = self._m.width - for w in self._widgets: - if w.interested_in(key): - w.update(self, width) - width -= len(str(w)) + for w in self._interests.get(key, []): + w.update(self, width) + width -= len(str(w)) self._m.write(''.join(str(w) for w in self._widgets)) def increase(self, key, delta): diff --git a/ttystatus/string.py b/ttystatus/string.py index 6806b01..950791c 100644 --- a/ttystatus/string.py +++ b/ttystatus/string.py @@ -23,7 +23,7 @@ class String(ttystatus.Widget): def __init__(self, key): self._key = key - self.interesting_keys = set([key]) + self.interesting_keys = [key] def update(self, master, width): self.value = master[self._key] diff --git a/ttystatus/widget.py b/ttystatus/widget.py index c498e96..e6fa9bc 100644 --- a/ttystatus/widget.py +++ b/ttystatus/widget.py @@ -23,6 +23,9 @@ class Widget(object): master TerminalStatus widget. They return the formatted string via __str__. + Widgets must have an attribute 'interesting_keys', listing the + keys it is interested in. + ''' def __str__(self): @@ -32,10 +35,6 @@ class Widget(object): else: return '' - def interested_in(self, key): - '''Are we interested in this specific value?''' - return key in self.interesting_keys - def update(self, master, width): '''Update displayed value for widget, from values in master. |