A simple library that aims at making hierarchical progress iterators / generators easy.
A single point API: progresso(it: Iterable, start: float = 0, end: float = 100) -> Iterable
I'll use the term task to mean any python iterable or generator.
Rules of the game:
- Each task is responsible of generating (yielding) incremental progress between [0, 100].
- The task is free to generate any number of steps (min 1)
- The task is free to start at any point as long as the value is between [0,100]
- Value is truncated to max(value, 0)
- Value is truncated to min(value, 100)
- If a value is less than previous it is discarded (I can be convinced otherwise to emulate progress regressing)
- If the task last value is less than 100, an extra value 100 is generated
Example:
>>> def task_1():
... yield 10
... yield 90
... yield 100
...
>>> def task_2():
... yield 5
... yield 2
... yield 99
...
>>> def task():
... yield 30
... yield from progresso(task_1(), 30, 60)
... yield from progresso(task_2(), 60, 90)
>>> for i in progresso(task()):
... print(i)
30.0
33.0
57.0
60.0
61.5
89.7
90.0
100.0