[conduit: 83/138] Bare bones progress widget



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]