0

Show an ETA when using the plain text logger

Closes #1088
This commit is contained in:
Andrew Chin
2014-08-19 22:49:33 -04:00
parent 322922b8e6
commit 924d396758

View File

@@ -92,17 +92,50 @@ class LoggingObserver(Observer):
#this is an easy way to make the first update() call print a line #this is an easy way to make the first update() call print a line
self.last_update = -101 self.last_update = -101
# a fake ProgressBar, for the sake of ETA
class FakePBar(object):
def __init__(self):
self.maxval = None
self.currval = 0
self.finished = False
self.start_time = None
self.seconds_elapsed = 0
def finish(self):
self.update(self.maxval)
def update(self, value):
assert 0 <= value <= self.maxval
self.currval = value
if self.finished:
return False
if not self.start_time:
self.start_time = time.time()
self.seconds_elapsed = time.time() - self.start_time
if value == self.maxval:
self.finished = True
self.fake = FakePBar();
self.eta = progressbar.ETA()
def start(self, max_value):
self.fake.maxval = max_value
super(LoggingObserver, self).start(max_value)
def finish(self): def finish(self):
logging.info("Rendered %d of %d. %d%% complete", self.get_max_value(), self.fake.finish()
self.get_max_value(), 100.0) logging.info("Rendered %d of %d. %d%% complete. %s", self.get_max_value(),
self.get_max_value(), 100.0, self.eta.update(self.fake))
super(LoggingObserver, self).finish() super(LoggingObserver, self).finish()
def update(self, current_value): def update(self, current_value):
super(LoggingObserver, self).update(current_value) super(LoggingObserver, self).update(current_value)
self.fake.update(current_value)
if self._need_update(): if self._need_update():
logging.info("Rendered %d of %d. %d%% complete", logging.info("Rendered %d of %d. %d%% complete. %s",
self.get_current_value(), self.get_max_value(), self.get_current_value(), self.get_max_value(),
self.get_percentage()) self.get_percentage(), self.eta.update(self.fake))
self.last_update = current_value self.last_update = current_value
return True return True
return False return False