summaryrefslogtreecommitdiffstats
path: root/pym/portage/emaint/progress.py
diff options
context:
space:
mode:
authorBrian Dolbec <dolsen@gentoo.org>2012-07-22 17:50:39 -0700
committerZac Medico <zmedico@gentoo.org>2012-07-22 17:50:39 -0700
commit9e19ac0a16a57f3dded8124e650fb6bf6f3d00be (patch)
tree721568bac79a9c02abc556ca8981c4373dac264c /pym/portage/emaint/progress.py
parent8f9ba227869775cf7f35037283e88e4cee047703 (diff)
downloadportage-9e19ac0a16a57f3dded8124e650fb6bf6f3d00be.tar.gz
portage-9e19ac0a16a57f3dded8124e650fb6bf6f3d00be.tar.bz2
portage-9e19ac0a16a57f3dded8124e650fb6bf6f3d00be.zip
emaint: split into separate modules
Diffstat (limited to 'pym/portage/emaint/progress.py')
-rw-r--r--pym/portage/emaint/progress.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/pym/portage/emaint/progress.py b/pym/portage/emaint/progress.py
new file mode 100644
index 000000000..e43c2afbd
--- /dev/null
+++ b/pym/portage/emaint/progress.py
@@ -0,0 +1,61 @@
+# Copyright 2005-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+import time
+import signal
+
+import portage
+
+
+class ProgressHandler(object):
+ def __init__(self):
+ self.reset()
+
+ def reset(self):
+ self.curval = 0
+ self.maxval = 0
+ self.last_update = 0
+ self.min_display_latency = 0.2
+
+ def onProgress(self, maxval, curval):
+ self.maxval = maxval
+ self.curval = curval
+ cur_time = time.time()
+ if cur_time - self.last_update >= self.min_display_latency:
+ self.last_update = cur_time
+ self.display()
+
+ def display(self):
+ raise NotImplementedError(self)
+
+
+class ProgressBar(ProgressHandler):
+ """Class to set up and return a Progress Bar"""
+
+ def __init__(self, isatty, **kwargs):
+ self.isatty = isatty
+ self.kwargs = kwargs
+ ProgressHandler.__init__(self)
+ self.progressBar = None
+
+ def start(self):
+ if self.isatty:
+ self.progressBar = portage.output.TermProgressBar(**self.kwargs)
+ signal.signal(signal.SIGWINCH, self.sigwinch_handler)
+ else:
+ self.onProgress = None
+ return self.onProgress
+
+ def set_label(self, _label):
+ self.kwargs['label'] = _label
+
+ def display(self):
+ self.progressBar.set(self.curval, self.maxval)
+
+ def sigwinch_handler(self, signum, frame):
+ lines, self.progressBar.term_columns = \
+ portage.output.get_term_size()
+
+ def stop(self):
+ signal.signal(signal.SIGWINCH, signal.SIG_DFL)
+