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

penguinolog / urwid / 37018256016
86%
master: 88%

Build:
Build:
LAST BUILD BRANCH: deprecations_handle
DEFAULT BRANCH: master
Ran 02 Oct 2026 02:13PM UTC
Jobs 12
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

02 Oct 2026 02:12PM UTC coverage: 86.353%. First build
37018256016

push

github

penguinolog
Fix tree recursion, index scans and node leak

Deep or wide trees from untrusted data no longer crash or stall
rendering, and reloading children no longer accumulates nodes.

- TreeWidget.last_child and TreeNode.get_depth loop instead of
  recursing once per level, so a subtree deeper than the recursion
  limit no longer raises RecursionError on render or End.
- A cycle in the tree or in the parent links raises TreeWidgetError
  instead of looping forever.
- ParentNode.get_child_index uses a key -> index map, rebuilt when it
  no longer matches the key list, instead of list.index on each step.
- ParentNode.get_child_keys(reload=True) drops cached child nodes
  whose keys are gone; a key dropped by a reload gets a fresh node
  later, so its expanded state is not kept.

| what | avg time before | avg time after | percent change |
| --- | --- | --- | --- |
| urwid.ParentNode.get_child_index (via urwid.TreeNode.next_sibling), 1000 siblings | 6.6 ms | 1.4 ms | -79% |
| urwid.ParentNode.get_child_index (via urwid.TreeNode.next_sibling), 5000 siblings | 126.3 ms | 7.5 ms | -94% |
| urwid.ParentNode.get_child_index (via urwid.TreeNode.next_sibling), 20000 siblings | 1875.8 ms | 31.5 ms | -98% |
| urwid.ParentNode.get_child_index (via urwid.ScrollBar.render over urwid.TreeListBox), 1000 entries | 18.1 ms | 8.3 ms | -54% |
| urwid.ParentNode.get_child_index (via urwid.ScrollBar.render over urwid.TreeListBox), 5000 entries | 270.9 ms | 39.0 ms | -86% |
| urwid.ParentNode.get_child_index (via urwid.ScrollBar.render over urwid.TreeListBox), 20000 entries | 3698.5 ms | 154.2 ms | -96% |

4638 of 5574 branches covered (83.21%)

Branch coverage included in aggregate %.

53 of 54 new or added lines in 1 file covered. (98.15%)

11617 of 13250 relevant lines covered (87.68%)

9.8 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
98.43
urwid/widget/treetools.py
Jobs
ID Job ID Ran Files Coverage
1 run-3.10-windows-latest - 37018256016.1 02 Oct 2026 02:14PM UTC 68
76.08
GitHub Action Run
2 run-3.12-windows-latest - 37018256016.2 02 Oct 2026 02:15PM UTC 68
76.08
GitHub Action Run
3 run-3.13-ubuntu-latest - 37018256016.3 02 Oct 2026 02:13PM UTC 68
85.0
GitHub Action Run
4 run-3.14-windows-latest - 37018256016.4 02 Oct 2026 02:15PM UTC 68
76.08
GitHub Action Run
5 run-3.9-ubuntu-latest - 37018256016.5 02 Oct 2026 02:14PM UTC 68
84.96
GitHub Action Run
6 run-3.11-windows-latest - 37018256016.6 02 Oct 2026 02:15PM UTC 68
76.08
GitHub Action Run
7 run-3.9-windows-latest - 37018256016.7 02 Oct 2026 02:15PM UTC 68
76.04
GitHub Action Run
8 run-3.11-ubuntu-latest - 37018256016.8 02 Oct 2026 02:14PM UTC 68
85.0
GitHub Action Run
9 run-3.10-ubuntu-latest - 37018256016.9 02 Oct 2026 02:14PM UTC 68
85.01
GitHub Action Run
10 run-3.13-windows-latest - 37018256016.10 02 Oct 2026 02:15PM UTC 68
76.08
GitHub Action Run
11 run-3.12-ubuntu-latest - 37018256016.11 02 Oct 2026 02:13PM UTC 68
85.0
GitHub Action Run
12 run-3.14-ubuntu-latest - 37018256016.12 02 Oct 2026 02:13PM UTC 68
85.0
GitHub Action Run
Source Files on build 37018256016
  • Tree
  • List 68
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #37018256016
  • a2e57cef on github
  • 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