From 836a3beea16e3011bfa00ac394205ed81a48393a Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Sun, 3 May 2009 18:07:22 +0000 Subject: [PATCH] * morituri/common/task.py: Make SyncRunner clear previous description/progress task by tracking longest output given up to now. --- ChangeLog | 6 ++++++ morituri/common/task.py | 23 +++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2629101..f43b63d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-05-03 Thomas Vander Stichele + + * morituri/common/task.py: + Make SyncRunner clear previous description/progress task by + tracking longest output given up to now. + 2009-05-03 Thomas Vander Stichele * morituri/program/cdparanoia.py: diff --git a/morituri/common/task.py b/morituri/common/task.py index 3e46b78..6eeb22a 100644 --- a/morituri/common/task.py +++ b/morituri/common/task.py @@ -267,6 +267,7 @@ class SyncRunner(TaskRunner): """ def __init__(self, verbose=True): self._verbose = verbose + self._longest = 0 # longest string shown; for clearing def run(self, task, verbose=None, skip=False): self._task = task @@ -296,25 +297,35 @@ class SyncRunner(TaskRunner): if value >= 1.0: if self._skip: - sys.stdout.write('%s %3d %%\n' % ( + self._output('%s %3d %%' % ( self._task.description, 100.0)) else: # clear with whitespace - text = '%s %3d %%' % ( - self._task.description, 100.0) - sys.stdout.write("%s\r" % (' ' * len(text), )) + sys.stdout.write("%s\r" % (' ' * self._longest, )) + + def _output(self, what, newline=False, ret=True): + sys.stdout.write(what) + sys.stdout.write(' ' * (self._longest - len(what))) + if ret: + sys.stdout.write('\r') + if newline: + sys.stdout.write('\n') + sys.stdout.flush() + if len(what) > self._longest: + #print; print 'setting longest', self._longest; print + self._longest = len(what) def described(self, task, description): if self._verboseRun: self._report() def stopped(self, task): + self.progressed(task, 1.0) self._loop.quit() def _report(self): - sys.stdout.write('%s %3d %%\r' % ( + self._output('%s %3d %%' % ( self._task.description, self._task.progress * 100.0)) - sys.stdout.flush() if __name__ == '__main__': task = DummyTask()