113
113
def update(self, msg, current_cnt, total_cnt=None):
114
114
"""Update and redraw progress bar."""
115
115
if self.start_time is None:
116
self.start_time = datetime.datetime.now()
116
self.start_time = time.time()
118
118
# save these for the tick() function
119
119
self.last_msg = msg
201
def divide_timedelta(delt, divisor):
202
"""Divides a timedelta object"""
203
return datetime.timedelta(float(delt.days)/divisor,
204
float(delt.seconds)/divisor,
205
float(delt.microseconds)/divisor)
207
201
def str_tdelta(delt):
210
return str(datetime.timedelta(delt.days, delt.seconds))
213
def get_eta(start_time, current, total, enough_samples=20):
214
if start_time is None or current == 0:
216
elif current < enough_samples:
217
# FIXME: No good if it's not a count
219
elapsed = datetime.datetime.now() - start_time
220
total_duration = divide_timedelta(elapsed * long(total),
222
if elapsed < total_duration:
223
eta = total_duration - elapsed
225
eta = total_duration - total_duration
204
delt = int(round(delt))
205
return '%d:%02d:%02d' % (delt/3600,
210
def get_eta(start_time, current, total, enough_samples=3):
211
if start_time is None:
217
if current < enough_samples:
223
elapsed = time.time() - start_time
225
if elapsed < 2.0: # not enough time to estimate
228
total_duration = float(elapsed) * float(total) / float(current)
230
assert total_duration >= elapsed
232
return total_duration - elapsed