1 import sys, time
2
4 - def __init__(self, total=None, id="UNKNOWN", step=None):
5 self.total = total
6 if self.total != None:
7 self.total = float(self.total)
8 self.current = 0
9 self.progress = 0.0
10 self.prevProgress = -99.0
11 self.id = id
12 self.prevUpdateString = "None"
13 self.step = step
14 if total != None and step == None:
15 self.step = 5.0
16 self.showMilliseconds = False
17
18 self.prevPrintTime = 0
19 self.timeStep = 30
20 self.startTime = time.time()
21 self.prevUpdateStringLen = 0
22
24 if self.total == None:
25 print >> sys.stderr, ""
26
28 """
29 Mark as finished to suppress the error message, regardless of actual status
30 """
31 self.progress = 100.0
32
34
35 if self.total != None and not self.progress >= 100.0:
36 import sys
37 print >> sys.stderr, "Counter \"" + self.id + "\" did not finish"
38 self.showLastUpdate()
39
40 - def update(self, amount=1, string="Processing: "):
41 self.current += amount
42 if self.total != None:
43 self.progress = self.current / self.total * 100.0
44 self.prevUpdateString = string + "%.2f" % self.progress + " %"
45 else:
46 self.progress += amount
47 self.prevUpdateString = string + str(self.current)
48
49 currentTime = time.time()
50 timeStepExceeded = currentTime - self.prevPrintTime > self.timeStep
51 stepExceeded = (self.step != None) and (self.progress - self.prevProgress >= self.step)
52
53 self.prevUpdateString += " (" + self.getElapsedTimeString(currentTime) + ")"
54
55 if self.total != None:
56 if self.progress >= 100.0 or stepExceeded or timeStepExceeded:
57 print >> sys.stderr, "\r" + self.prevUpdateString + max(0, self.prevUpdateStringLen-len(self.prevUpdateString)) * " ",
58 self.prevProgress = self.progress
59 self.prevPrintTime = currentTime
60 self.prevUpdateStringLen = len(self.prevUpdateString)
61 if self.progress >= 100.0:
62 print >> sys.stderr
63 else:
64 if stepExceeded or timeStepExceeded:
65 self.progress = 0
66 print >> sys.stderr, "\r" + self.prevUpdateString + max(0, self.prevUpdateStringLen-len(self.prevUpdateString)) * " ",
67 self.prevProgress = self.progress
68 self.prevPrintTime = currentTime
69 self.prevUpdateStringLen = len(self.prevUpdateString)
70
72 elapsedTime = currentTime - self.startTime
73 hours = elapsedTime / 3600.0
74 elapsedTime = elapsedTime % 3600.0
75 minutes = elapsedTime / 60.0
76 seconds = elapsedTime % 60.0
77 if self.showMilliseconds:
78 seconds = "%.3f" % seconds
79 else:
80 seconds = str(int(seconds))
81 return str(int(hours)) + ":" + str(int(minutes)) + ":" + seconds
82
84 if self.total != None:
85 print >> sys.stderr, "Last count: " + str(self.current) + "/" + str(int(self.total))
86 else:
87 print >> sys.stderr, "Last count: " + str(self.current)
88 print >> sys.stderr, "Last update: " + self.prevUpdateString
89