import sys
import time
from progressbar import (
ETA,
AdaptiveETA,
AnimatedMarker,
Bar,
BouncingBar,
Counter,
FileTransferSpeed,
FormatLabel,
Percentage,
ProgressBar,
ReverseBar,
RotatingMarker,
SimpleProgress,
Timer,
UnknownLength,
)
examples = []
def example(fn):
try:
name = f'Example {int(fn.__name__[7:]):d}'
except Exception:
name = fn.__name__
def wrapped():
try:
sys.stdout.write(f'Running: {name}\n')
fn()
sys.stdout.write('\n')
except KeyboardInterrupt:
sys.stdout.write('\nSkipping example.\n\n')
examples.append(wrapped)
return wrapped
@example
def example0() -> None:
pbar = ProgressBar(widgets=[Percentage(), Bar()], maxval=300).start()
for i in range(300):
time.sleep(0.01)
pbar.update(i + 1)
pbar.finish()
@example
def example1() -> None:
widgets = [
'Test: ',
Percentage(),
' ',
Bar(marker=RotatingMarker()),
' ',
ETA(),
' ',
FileTransferSpeed(),
]
pbar = ProgressBar(widgets=widgets, maxval=10000).start()
for i in range(1000):
pbar.update(10 * i + 1)
pbar.finish()
@example
def example2() -> None:
class CrazyFileTransferSpeed(FileTransferSpeed):
"""It's bigger between 45 and 80 percent."""
def update(self, pbar):
if 45 < pbar.percentage() < 80:
return 'Bigger Now ' + FileTransferSpeed.update(self, pbar)
else:
return FileTransferSpeed.update(self, pbar)
widgets = [
CrazyFileTransferSpeed(),
' <<<',
Bar(),
'>>> ',
Percentage(),
' ',
ETA(),
]
pbar = ProgressBar(widgets=widgets, maxval=10000)
pbar.start()
for i in range(2000):
pbar.update(5 * i + 1)
pbar.finish()
@example
def example3() -> None:
widgets = [Bar('>'), ' ', ETA(), ' ', ReverseBar('<')]
pbar = ProgressBar(widgets=widgets, maxval=10000).start()
for i in range(1000):
pbar.update(10 * i + 1)
pbar.finish()
@example
def example4() -> None:
widgets = [
'Test: ',
Percentage(),
' ',
Bar(marker='0', left='[', right=']'),
' ',
ETA(),
' ',
FileTransferSpeed(),
]
pbar = ProgressBar(widgets=widgets, maxval=500)
pbar.start()
for i in range(100, 500 + 1, 50):
time.sleep(0.2)
pbar.update(i)
pbar.finish()
@example
def example5() -> None:
pbar = ProgressBar(widgets=[SimpleProgress()], maxval=17).start()
for i in range(17):
time.sleep(0.2)
pbar.update(i + 1)
pbar.finish()
@example
def example6() -> None:
pbar = ProgressBar().start()
for i in range(100):
time.sleep(0.01)
pbar.update(i + 1)
pbar.finish()
@example
def example7() -> None:
pbar = ProgressBar()
for _i in pbar(range(80)):
time.sleep(0.01)
@example
def example8() -> None:
pbar = ProgressBar(maxval=80)
for _i in pbar(i for i in range(80)):
time.sleep(0.01)
@example
def example9() -> None:
pbar = ProgressBar(widgets=['Working: ', AnimatedMarker()])
for _i in pbar(i for i in range(50)):
time.sleep(0.08)
@example
def example10() -> None:
widgets = ['Processed: ', Counter(), ' lines (', Timer(), ')']
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(150)):
time.sleep(0.1)
@example
def example11() -> None:
widgets = [FormatLabel('Processed: %(value)d lines (in: %(elapsed)s)')]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(150)):
time.sleep(0.1)
@example
def example12() -> None:
widgets = ['Balloon: ', AnimatedMarker(markers='.oO@* ')]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(24)):
time.sleep(0.3)
@example
def example13() -> None:
try:
widgets = ['Arrows: ', AnimatedMarker(markers='←↖↑↗→↘↓↙')]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(24)):
time.sleep(0.3)
except UnicodeError:
sys.stdout.write('Unicode error: skipping example')
@example
def example14() -> None:
try:
widgets = ['Arrows: ', AnimatedMarker(markers='◢◣◤◥')]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(24)):
time.sleep(0.3)
except UnicodeError:
sys.stdout.write('Unicode error: skipping example')
@example
def example15() -> None:
try:
widgets = ['Wheels: ', AnimatedMarker(markers='◐◓◑◒')]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(24)):
time.sleep(0.3)
except UnicodeError:
sys.stdout.write('Unicode error: skipping example')
@example
def example16() -> None:
widgets = [FormatLabel('Bouncer: value %(value)d - '), BouncingBar()]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(180)):
time.sleep(0.05)
@example
def example17() -> None:
widgets = [
FormatLabel('Animated Bouncer: value %(value)d - '),
BouncingBar(marker=RotatingMarker()),
]
pbar = ProgressBar(widgets=widgets)
for _i in pbar(i for i in range(180)):
time.sleep(0.05)
@example
def example18() -> None:
widgets = [Percentage(), ' ', Bar(), ' ', ETA(), ' ', AdaptiveETA()]
pbar = ProgressBar(widgets=widgets, maxval=500)
pbar.start()
for i in range(500):
time.sleep(0.01 + (i < 100) * 0.01 + (i > 400) * 0.9)
pbar.update(i + 1)
pbar.finish()
@example
def example19() -> None:
pbar = ProgressBar()
for _i in pbar([]):
pass
pbar.finish()
@example
def example20() -> None:
"""Widgets that behave differently when length is unknown"""
widgets = [
'[When length is unknown at first]',
' Progress: ',
SimpleProgress(),
', Percent: ',
Percentage(),
' ',
ETA(),
' ',
AdaptiveETA(),
]
pbar = ProgressBar(widgets=widgets, maxval=UnknownLength)
pbar.start()
for i in range(20):
time.sleep(0.5)
if i == 10:
pbar.maxval = 20
pbar.update(i + 1)
pbar.finish()
if __name__ == '__main__':
try:
for example in examples:
example()
except KeyboardInterrupt:
sys.stdout.write('\nQuitting examples.\n')