16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
from bzrlib.progress import ProgressBar
22
20
class Progress(object):
23
21
def __init__(self, units, current, total=None):
25
23
self.current = current
28
def _get_percent(self):
29
if self.total is None:
31
return 100.0 * self.current / self.total
33
percent = property(_get_percent)
26
if self.total is not None:
27
self.percent = 100.0 * current / total
36
30
if self.total is not None:
37
31
return "%i of %i %s %.1f%%" % (self.current, self.total, self.units,
40
return "%i %s" (self.current, self.units)
42
def show_progress(pi, prog):
43
pi.update(prog.units, prog.current, prog.total)
34
return "%i %s" (self.current, self.units)
37
def progress_bar(progress):
38
fmt = " %i of %i %s (%.1f%%)"
39
f = fmt % (progress.total, progress.total, progress.units, 100.0)
42
markers = int (float(cols) * progress.current / progress.total)
43
txt = fmt % (progress.current, progress.total, progress.units,
45
sys.stderr.write("\r[%s%s]%s" % ('='*markers, ' '*(cols-markers), txt))
45
47
def clear_progress_bar():
46
48
sys.stderr.write('\r%s\r' % (' '*79))
50
def spinner_str(progress, show_text=False):
52
Produces the string for a textual "spinner" progress indicator
53
:param progress: an object represinting current progress
54
:param show_text: If true, show progress text as well
55
:return: The spinner string
57
>>> spinner_str(Progress("baloons", 0))
59
>>> spinner_str(Progress("baloons", 5))
61
>>> spinner_str(Progress("baloons", 6), show_text=True)
64
positions = ('|', '/', '-', '\\')
65
text = positions[progress.current % 4]
67
text+=" %i %s" % (progress.current, progress.units)
70
def spinner(progress, show_text=False, output=sys.stderr):
72
Update a spinner progress indicator on an output
73
:param progress: The progress to display
74
:param show_text: If true, show text as well as spinner
75
:param output: The output to write to
77
>>> spinner(Progress("baloons", 6), show_text=True, output=sys.stdout)
80
output.write('\r%s' % spinner_str(progress, show_text))
84
result = doctest.testmod()
87
print "All tests passed"
89
print "No tests to run"
90
if __name__ == "__main__":