mirror of
https://github.com/verigak/progress.git
synced 2025-12-09 11:45:36 +00:00
Add a start method
Use it to show progress without advancing
This commit is contained in:
@@ -35,16 +35,16 @@ class Infinite(object):
|
|||||||
self.ctx[key] = val
|
self.ctx[key] = val
|
||||||
|
|
||||||
self.index = 0
|
self.index = 0
|
||||||
self.avg = None
|
self.avg = 0
|
||||||
self._ts = time()
|
self._ts = time()
|
||||||
|
|
||||||
def update_stats(self):
|
def update_stats(self):
|
||||||
# Calculate moving average
|
# Calculate moving average
|
||||||
now = time()
|
now = time()
|
||||||
dt = now - self._ts
|
dt = now - self._ts
|
||||||
self._ts = now
|
|
||||||
w = self.avg_window
|
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()
|
kv = [(key, val) for key, val in self.__dict__.items()
|
||||||
if not key.startswith('_')]
|
if not key.startswith('_')]
|
||||||
@@ -53,6 +53,9 @@ class Infinite(object):
|
|||||||
def update(self):
|
def update(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def finish(self):
|
def finish(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -74,30 +77,35 @@ class Progress(Infinite):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Progress, self).__init__(*args, **kwargs)
|
super(Progress, self).__init__(*args, **kwargs)
|
||||||
self.max = kwargs.get('max', 100)
|
self.max = kwargs.get('max', 100)
|
||||||
self.eta = None
|
self.eta = 0
|
||||||
|
|
||||||
def update_stats(self):
|
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.progress = min(1, self.index / self.max)
|
||||||
self.percent = self.progress * 100
|
self.percent = self.progress * 100
|
||||||
self.remaining = self.max - self.index
|
self.remaining = self.max - self.index
|
||||||
|
|
||||||
|
# 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.eta = int(ceil(self.avg * self.remaining))
|
||||||
|
self._ts = now
|
||||||
|
|
||||||
kv = [(key, val) for key, val in self.__dict__.items()
|
kv = [(key, val) for key, val in self.__dict__.items()
|
||||||
if not key.startswith('_')]
|
if not key.startswith('_')]
|
||||||
self.ctx.update(kv)
|
self.ctx.update(kv)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
self.delta = 0
|
||||||
|
self.update_stats()
|
||||||
|
self.update()
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
prev = self.index
|
prev = self.index
|
||||||
self.index = min(self.index + 1, self.max)
|
self.index = min(self.index + 1, self.max)
|
||||||
self.delta = self.index - prev
|
self.delta = self.index - prev
|
||||||
if self.delta > 0:
|
|
||||||
self.update_stats()
|
self.update_stats()
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
@@ -109,7 +117,6 @@ class Progress(Infinite):
|
|||||||
|
|
||||||
self.index = index
|
self.index = index
|
||||||
self.delta = delta
|
self.delta = delta
|
||||||
if delta > 0:
|
|
||||||
self.update_stats()
|
self.update_stats()
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user