1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """Progress bar utilities for reporting feedback on the progress of an
23 application."""
24
25
27 """An ultra-simple progress indicator that just writes a dot for each
28 action"""
29
31 import sys
32 self.stderr = sys.stderr
33 self.amount = 0
34
35 - def show(self, verbosemessage):
36 """show a dot for progress :-)"""
37
38 self.stderr.write('.')
39 self.stderr.flush()
40
44
47
48
50 """An invisible indicator that does nothing."""
51
54
55 - def show(self, verbosemessage):
56 """show nothing for progress :-)"""
57 pass
58
61
62
64 """A plain progress bar that doesn't know very much about output."""
65
66 - def __init__(self, minValue=0, maxValue=100, totalWidth=50):
67 self.progBar = "[]"
68 self.min = minValue
69 self.max = maxValue
70 self.span = maxValue - minValue
71 self.width = totalWidth
72 self.amount = 0
73
75 """Produces the string representing the progress bar."""
76 if self.amount < self.min:
77 self.amount = self.min
78 if self.amount > self.max:
79 self.amount = self.max
80
81
82 diffFromMin = float(self.amount - self.min)
83 percentDone = (diffFromMin / float(self.span)) * 100.0
84 percentDone = round(percentDone)
85 percentDone = int(percentDone)
86
87
88 allFull = self.width - 7
89 numHashes = (percentDone / 100.0) * allFull
90 numHashes = int(round(numHashes))
91
92
93 self.progBar = "[%s%s] %3d%%" % ('#' * numHashes,
94 ' ' * (allFull - numHashes),
95 percentDone)
96 return str(self.progBar)
97
98 - def show(self, verbosemessage):
99 """displays the progress bar"""
100
101 print self
102
103
105 """A ProgressBar that just writes out the messages without any progress
106 display"""
107
112
113 - def show(self, verbosemessage):
114 self.sys.stderr.write(verbosemessage + '\n')
115 self.sys.stderr.flush()
116
117
119 """A ProgressBar which knows how to go back to the beginning of the
120 line."""
121
126
127 - def show(self, verbosemessage):
128 self.sys.stderr.write(str(self) + '\r')
129 self.sys.stderr.flush()
130
132 self.sys.stderr.write('\n')
133 self.sys.stderr.flush()
134
137
138
140
144
145 - def show(self, verbosemessage):
146 output = str(self)
147 self.sys.stderr.write('\r' + ' ' * self.lastwidth)
148 self.sys.stderr.write('\r' + verbosemessage + '\n')
149 self.lastwidth = len(output)
150 self.sys.stderr.write('\r' + output)
151 self.sys.stderr.flush()
152
153
154 -def test(progressbar):
160
161 if __name__ == '__main__':
162 p = HashProgressBar(0, 100, 50)
163 test(p)
164