diff options
author | Brian Dolbec <dolsen@gentoo.org> | 2012-07-22 17:50:39 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-07-22 17:50:39 -0700 |
commit | 9e19ac0a16a57f3dded8124e650fb6bf6f3d00be (patch) | |
tree | 721568bac79a9c02abc556ca8981c4373dac264c /pym/portage/emaint/progress.py | |
parent | 8f9ba227869775cf7f35037283e88e4cee047703 (diff) | |
download | portage-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.py | 61 |
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) + |