summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2010-07-07 08:41:18 +1200
committerLars Wirzenius <liw@liw.fi>2010-07-07 08:41:18 +1200
commitc6071c10b8859f09f9cc7f0949d2fd7e3ad2d9c0 (patch)
tree84c3df7cadc9f6527735ef5c60e03f06c68c78fc
parentb15fcce5b6d2046e3419b3201e38667554de53fd (diff)
downloadpython-ttystatus-c6071c10b8859f09f9cc7f0949d2fd7e3ad2d9c0.tar.gz
Speed things up further by pre-computing which widgets are interested in which key.
-rw-r--r--ttystatus/bytesize.py2
-rw-r--r--ttystatus/counter.py2
-rw-r--r--ttystatus/elapsed.py2
-rw-r--r--ttystatus/index.py2
-rw-r--r--ttystatus/literal.py2
-rw-r--r--ttystatus/pathname.py2
-rw-r--r--ttystatus/percent.py2
-rw-r--r--ttystatus/progressbar.py2
-rw-r--r--ttystatus/remtime.py2
-rw-r--r--ttystatus/status.py10
-rw-r--r--ttystatus/string.py2
-rw-r--r--ttystatus/widget.py7
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.