• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

penguinolog / urwid / 34455989757
74%
master: 74%

Build:
Build:
LAST BUILD BRANCH: doc_env
DEFAULT BRANCH: master
Ran 10 Sep 2026 08:37AM UTC
Jobs 11
Files 68
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Sep 2026 08:34AM UTC coverage: 73.637% (+0.08%) from 73.553%
34455989757

push

github

penguinolog
Speed up the widget render hot paths

Columns.get_column_sizes fills lists instead of index-keyed dicts, the
Columns and Pile sizing flag combinations are module constants rather
than rebuilt per element, and CompositeCanvas.rows and cols accumulate
in place, not over a generator.

CanvasCache.invalidate, CanvasCache.cleanup and Canvas.set_cursor use
dict.pop instead of contextlib.suppress, and CanvasCache.store no
longer builds a walk_depends closure per stored canvas.

apply_target_encoding calls str.encode instead of codecs.encode, and
reads the SO/SI byte forms from constants in escape.py instead of
encoding them again for every rendered text segment.

LayoutSegment.__init__ dispatches on the segment length once and
unpacks directly, dropping an unreachable ValueError branch.

ProgressBar builds its label Text once per widget instead of once per
render and renders it through nocache_widget_render_instance: that
canvas is overwritten and discarded, so caching it only cost a weakref,
a store and a cleanup.

No public API changes. Canvas content, canvas types, warnings and
exception messages are unchanged, verified by differential runs over
727 ProgressBar cases, 7270 Columns and LayoutSegment cases, and 42
full-screen render cases.

| changed path | avg time before | avg time after | percent change |
| --- | --- | --- | --- |
| urwid/canvas.py | 1.95 us | 0.99 us | -49.4% |
| urwid/text_layout.py | 0.37 us | 0.29 us | -23.3% |
| urwid/util.py + urwid/display/escape.py | 0.90 us | 0.66 us | -26.2% |
| urwid/widget/columns.py | 13.72 us | 12.37 us | -9.8% |
| urwid/widget/pile.py | 24.15 us | 22.09 us | -8.5% |
| urwid/widget/progress_bar.py | 30.26 us | 17.20 us | -43.2% |
| (whole tree) TUI screen render | 26.91 ms | 25.34 ms | -5.9% |

3484 of 5254 branches covered (66.31%)

Branch coverage included in aggregate %.

85 of 89 new or added lines in 6 files covered. (95.51%)

1 existing line in 1 file now uncovered.

9616 of 12536 relevant lines covered (76.71%)

7.91 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
83.94
0.0% urwid/text_layout.py
1
94.87
-2.1% urwid/widget/progress_bar.py

Coverage Regressions

Lines Coverage ∆ File
1
81.73
0.23% urwid/canvas.py
Jobs
ID Job ID Ran Files Coverage
1 run-3.10-windows-latest - 34455989757.1 10 Sep 2026 08:38AM UTC 68
64.7
GitHub Action Run
2 run-3.13-ubuntu-latest - 34455989757.2 10 Sep 2026 08:37AM UTC 68
72.89
GitHub Action Run
3 run-3.9-windows-latest - 34455989757.3 10 Sep 2026 08:38AM UTC 68
64.71
GitHub Action Run
4 run-3.11-windows-latest - 34455989757.4 10 Sep 2026 08:37AM UTC 68
64.7
GitHub Action Run
5 run-3.12-windows-latest - 34455989757.5 10 Sep 2026 08:38AM UTC 68
64.7
GitHub Action Run
6 run-3.13-windows-latest - 34455989757.6 10 Sep 2026 08:38AM UTC 68
64.7
GitHub Action Run
7 run-3.14-ubuntu-latest - 34455989757.7 10 Sep 2026 08:37AM UTC 68
72.89
GitHub Action Run
8 run-3.10-ubuntu-latest - 34455989757.8 10 Sep 2026 08:37AM UTC 68
72.9
GitHub Action Run
9 run-3.11-ubuntu-latest - 34455989757.9 10 Sep 2026 08:37AM UTC 68
72.89
GitHub Action Run
10 run-3.9-ubuntu-latest - 34455989757.10 10 Sep 2026 08:37AM UTC 68
72.91
GitHub Action Run
11 run-3.12-ubuntu-latest - 34455989757.11 10 Sep 2026 08:37AM UTC 68
72.89
GitHub Action Run
Source Files on build 34455989757
  • Tree
  • List 68
  • Changed 8
  • Source Changed 7
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #34455989757
  • af3fb2a6 on github
  • Prev Build on master (#34450956752)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc