Source code for stouputils.print.progress_bar
# Imports
from collections.abc import Iterable, Iterator
from typing import Any
from ..config import StouputilsConfig as Cfg
# Colored for loop function
[docs]
def colored_for_loop[T](
iterable: Iterable[T],
desc: str = "Processing",
color: str = Cfg.MAGENTA,
bar_format: str = Cfg.BAR_FORMAT,
ascii: bool = False,
smooth_tqdm: bool = True,
**kwargs: Any
) -> Iterator[T]:
""" Function to iterate over a list with a colored TQDM progress bar like the other functions in this module.
Args:
iterable (Iterable): List to iterate over
desc (str): Description of the function execution displayed in the progress bar
color (str): Color of the progress bar (Defaults to ::attr::MAGENTA)
bar_format (str): Format of the progress bar (Defaults to ::attr::BAR_FORMAT)
ascii (bool): Whether to use ASCII or Unicode characters for the progress bar (Defaults to False)
smooth_tqdm (bool): Whether to enable smooth progress bar updates by setting miniters=1 and mininterval=0.0 (Defaults to True)
**kwargs: Additional arguments to pass to the TQDM progress bar
Yields:
T: Each item of the iterable
Examples:
>>> import time
>>> for i in colored_for_loop(range(10), desc="Time sleeping loop"):
... time.sleep(0.01) # doctest: +SKIP
>>> # Time sleeping loop: 100%|██████████████████| 10/10 [ 95.72it/s, 00:00<00:00]
"""
if bar_format == Cfg.BAR_FORMAT:
bar_format = bar_format.replace(Cfg.MAGENTA, color)
desc = color + desc
if smooth_tqdm:
kwargs.setdefault("mininterval", 0.0)
try:
total = len(iterable) # type: ignore
import shutil
width = shutil.get_terminal_size().columns
kwargs.setdefault("miniters", max(1, total // width))
except (TypeError, OSError):
kwargs.setdefault("miniters", 1)
from tqdm.auto import tqdm
yield from tqdm(iterable, desc=desc, bar_format=bar_format, ascii=ascii, **kwargs)