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

urwid / urwid / 37019039932
90%

Build:
DEFAULT BRANCH: master
Ran 02 Oct 2026 02:20PM 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:19PM UTC coverage: 86.353% (+0.04%) from 86.317%
37019039932

push

github

web-flow
Fix tree recursion, index scans and node leak (#1389)

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
-0.31% urwid/widget/treetools.py
Jobs
ID Job ID Ran Files Coverage
1 run-3.9-windows-latest - 37019039932.1 02 Oct 2026 02:22PM UTC 68
76.04
GitHub Action Run
2 run-3.10-ubuntu-latest - 37019039932.2 02 Oct 2026 02:20PM UTC 68
85.01
GitHub Action Run
3 run-3.9-ubuntu-latest - 37019039932.3 02 Oct 2026 02:21PM UTC 68
84.96
GitHub Action Run
4 run-3.13-ubuntu-latest - 37019039932.4 02 Oct 2026 02:20PM UTC 68
85.0
GitHub Action Run
5 run-3.14-ubuntu-latest - 37019039932.5 02 Oct 2026 02:20PM UTC 68
85.0
GitHub Action Run
6 run-3.14-windows-latest - 37019039932.6 02 Oct 2026 02:21PM UTC 68
76.08
GitHub Action Run
7 run-3.13-windows-latest - 37019039932.7 02 Oct 2026 02:21PM UTC 68
76.08
GitHub Action Run
8 run-3.12-windows-latest - 37019039932.8 02 Oct 2026 02:21PM UTC 68
76.08
GitHub Action Run
9 run-3.12-ubuntu-latest - 37019039932.9 02 Oct 2026 02:20PM UTC 68
85.0
GitHub Action Run
10 run-3.10-windows-latest - 37019039932.10 02 Oct 2026 02:21PM UTC 68
76.08
GitHub Action Run
11 run-3.11-windows-latest - 37019039932.11 02 Oct 2026 02:21PM UTC 68
76.08
GitHub Action Run
12 run-3.11-ubuntu-latest - 37019039932.12 02 Oct 2026 02:20PM UTC 68
85.0
GitHub Action Run
Source Files on build 37019039932
  • Tree
  • List 68
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #37019039932
  • ca3bf2ca on github
  • Prev Build on master (#37018212329)
  • Next Build on master (#37019998166)
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