[conduit: 83/138] Bare bones progress widget
- From: John Carr <johncarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [conduit: 83/138] Bare bones progress widget
- Date: Thu, 21 May 2009 03:33:54 -0400 (EDT)
commit 5cdaa7235325c3039ac3153a6bdaeb0b06386a70
Author: John Carr <john carr unrouted co uk>
Date: Mon May 4 07:04:20 2009 -0700
Bare bones progress widget
---
test/soup/utils/progressbar.py | 64 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/test/soup/utils/progressbar.py b/test/soup/utils/progressbar.py
new file mode 100644
index 0000000..8dec04a
--- /dev/null
+++ b/test/soup/utils/progressbar.py
@@ -0,0 +1,64 @@
+
+import os
+import sys
+import signal
+import termios
+from fcntl import ioctl
+from array import array
+
+
+class Widget(object):
+
+ def __init__(self, pb, next=None):
+ self.pb = pb
+ self.next = next
+
+ def update(self):
+ raise NotImplementedError
+
+ def __str__(self):
+ return self.update()
+
+
+class SimpleWidget(Widget):
+
+ def update(self, pb):
+ return "%d of %d" % (pb.cur, pb.max)
+
+
+class BarWidget(Widget):
+
+ left = "["
+ right = "]"
+
+ def update(self):
+ progress_space = self.pb.term_width - len(self.left) - len(self.right)
+ number_of_frobs = self.pb.cur * progress_space / self.pb.max
+ number_of_spaces = progress_space - number_of_frobs
+ return self.left + "*" * number_of_frobs + " " * number_of_spaces + self.right
+
+
+class ProgressBar(object):
+
+ def __init__(self):
+ self.max = 100
+ self.cur = 0
+
+ self.f = sys.stderr
+
+ try:
+ self._handle_resize(None, None)
+ signal.signal(signal.SIGWINCH, self._handle_resize)
+ except:
+ self.term_width = int(os.environ.get('COLUMNS', 80)) - 1
+
+ self.widget = BarWidget(self)
+
+ def _handle_resize(self, signum, frame):
+ h, w = array('h', ioctl(self.f, termios.TIOCGWINSZ, '\0' * 8))[:2]
+ self.term_width = w
+
+ def update(self, cur):
+ self.cur = cur
+ self.f.write(self.widget.update() + '\r')
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]