iter: expose the iteration value to the object

Mentioned in #76.
This commit is contained in:
Ben Boeckel
2020-03-30 20:22:23 -04:00
parent 1ed414290f
commit 4af220e573
2 changed files with 8 additions and 2 deletions

View File

@@ -126,10 +126,13 @@ class Infinite(object):
self.update() self.update()
def iter(self, it): def iter(self, it):
self.iter_value = None
with self: with self:
for x in it: for x in it:
self.iter_value = x
yield x yield x
self.next() self.next()
del self.iter_value
def __enter__(self): def __enter__(self):
self.start() self.start()
@@ -177,7 +180,10 @@ class Progress(Infinite):
except TypeError: except TypeError:
pass pass
self.iter_value = None
with self: with self:
for x in it: for x in it:
self.iter_value = x
yield x yield x
self.next() self.next()
del self.iter_value

View File

@@ -20,9 +20,9 @@ def sleep():
for bar_cls in (Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar): for bar_cls in (Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar):
suffix = '%(index)d/%(max)d [%(elapsed)d / %(eta)d / %(eta_td)s]' suffix = '%(index)d/%(max)d [%(elapsed)d / %(eta)d / %(eta_td)s] (%(iter_value)s)'
bar = bar_cls(bar_cls.__name__, suffix=suffix) bar = bar_cls(bar_cls.__name__, suffix=suffix)
for i in bar.iter(range(200)): for i in bar.iter(range(200, 400)):
sleep() sleep()
for bar_cls in (IncrementalBar, PixelBar, ShadyBar): for bar_cls in (IncrementalBar, PixelBar, ShadyBar):