From a3fb1b4fccc794e94e0cd26a835289f121bd16c0 Mon Sep 17 00:00:00 2001 From: Giorgos Verigakis Date: Wed, 18 Jul 2012 10:50:56 +0800 Subject: [PATCH] Add a start method Use it to show progress without advancing --- progress/__init__.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/progress/__init__.py b/progress/__init__.py index f33d7d7..4feef69 100644 --- a/progress/__init__.py +++ b/progress/__init__.py @@ -35,16 +35,16 @@ class Infinite(object): self.ctx[key] = val self.index = 0 - self.avg = None + self.avg = 0 self._ts = time() def update_stats(self): # Calculate moving average now = time() dt = now - self._ts - self._ts = now w = self.avg_window - self.avg = dt if self.avg is None else (dt + w * self.avg) / (w + 1) + self.avg = dt if self.avg else (dt + w * self.avg) / (w + 1) + self._ts = now kv = [(key, val) for key, val in self.__dict__.items() if not key.startswith('_')] @@ -53,6 +53,9 @@ class Infinite(object): def update(self): pass + def start(self): + pass + def finish(self): pass @@ -74,31 +77,36 @@ class Progress(Infinite): def __init__(self, *args, **kwargs): super(Progress, self).__init__(*args, **kwargs) self.max = kwargs.get('max', 100) - self.eta = None + self.eta = 0 def update_stats(self): - # Calculate moving average - now = time() - dt = (now - self._ts) / self.delta - self._ts = now - w = self.avg_window - self.avg = dt if self.avg is None else (dt + w * self.avg) / (w + 1) - self.progress = min(1, self.index / self.max) self.percent = self.progress * 100 self.remaining = self.max - self.index - self.eta = int(ceil(self.avg * self.remaining)) + + # Calculate moving average + now = time() + if self.delta: + dt = (now - self._ts) / self.delta + w = self.avg_window + self.avg = dt if self.avg else (dt + w * self.avg) / (w + 1) + self.eta = int(ceil(self.avg * self.remaining)) + self._ts = now kv = [(key, val) for key, val in self.__dict__.items() if not key.startswith('_')] self.ctx.update(kv) + def start(self): + self.delta = 0 + self.update_stats() + self.update() + def next(self): prev = self.index self.index = min(self.index + 1, self.max) self.delta = self.index - prev - if self.delta > 0: - self.update_stats() + self.update_stats() self.update() def goto(self, index): @@ -109,8 +117,7 @@ class Progress(Infinite): self.index = index self.delta = delta - if delta > 0: - self.update_stats() + self.update_stats() self.update() def iter(self, it):