Skip to content

v4.7.0

Latest

Choose a tag to compare

@wolph wolph released this 05 Nov 10:38
· 4 commits to develop since this release
v4.7.0
d70d740

Highlights since 4.6.0:

Colours

  • Widgets are coloured by default: a bar on a colour terminal shows the default palette without enable_colors=True, spinners cycle through colours (color_cycle, HueGradient, rainbow). Output to a file or pipe is unchanged; progressbar.utils.no_color() strips the escapes from a widget called directly.
  • The Bar fill colours are constructor arguments (fg, bg); the Bar.fg and Bar.bg class attributes are gone.

Parallel execution

  • progressbar.map, imap, imap_unordered, starmap, thread_map, process_map, as_completed, the asyncio amap, aimap, aimap_unordered and gather, run for shell commands and the progressbar.parallel decorator, with bar='multi' for an overall bar plus one per task (#327).

Performance

  • A forced redraw of the default widgets is 20 percent faster than 4.6.0 with colours on; the fast path, the iterator overhead and the import time are at or below their 4.6.0 cost (#333). Colour escapes are cached per gradient and colour, templates are validated once, captured writes take a cheaper lock.

Security and hardening (#330)

  • New-style templates such as FormatLabel('{value.__class__}') raise ValueError: a template walking dunder or frame attributes could reach interpreter internals. Index access and ordinary attributes keep working.
  • Captured output survives a drain failure on the other stream, unwrapping restores the original stream even with a closed capture buffer, and the stream locks reset after fork. StreamWrapper.lock and listeners_lock are read-only properties.
  • MultiBar membership changes and expiry share one guard and track bars by identity.
  • The CLI validates every argument before opening the output file, exits 2 with a usage line on an invalid option and 130 after Ctrl-C, and ends quietly with status 0 when the pipeline's reader goes away.

Fixes

  • The fast bar reserves the width of prefix, desc and suffix, so a labelled bar no longer overflows the terminal (contributed by @rupayon123 in #331).
  • desc renders as a template, as in 4.6.0; a literal brace is doubled (#334).
  • PROGRESSBAR_MINIMUM_UPDATE_INTERVAL set to a non-numeric value is logged once and ignored instead of raising at the first bar.
  • Deprecation warnings for maxval, poll and currval name the caller's file and line.

Compatibility

  • Requires python-utils >= 4.1.4 (was 3.8.1): older releases render a negative scale_1024 power as 0.1 YiB.
  • Full list in CHANGES.rst.

Signed on 2026-11-12 with ppt sign, after the release.
The files above are the exact PyPI uploads for this version, verified by sha256 against PyPI before signing.
Each file has a GPG signature (.asc, key 149325FD15904E9C4EB89E95E81444E9CE1F695D) and a Sigstore bundle (.sigstore.json).
SHA256SUMS.asc signs the checksum list.
Rebuilt files, if any: none.
How to verify: https://github.com/WoLpH/python-project-tools/blob/master/VERIFY.md