urwid 2.5.3__tar.gz → 2.6.0.post0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of urwid might be problematic. Click here for more details.
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/workflows/isolated_static_check.yml +3 -3
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/workflows/pythonpackage.yml +16 -55
- urwid-2.6.0.post0/.pre-commit-config.yaml +45 -0
- {urwid-2.5.3/urwid.egg-info → urwid-2.6.0.post0}/PKG-INFO +8 -4
- {urwid-2.5.3 → urwid-2.6.0.post0}/README.rst +6 -2
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/conf.py +23 -6
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/browse.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/subproc2.py +4 -2
- urwid-2.6.0.post0/docs/manual/bright_combinations.py +84 -0
- urwid-2.6.0.post0/docs/manual/safe_combinations.py +87 -0
- urwid-2.6.0.post0/docs/manual/wanat.py +24 -0
- urwid-2.6.0.post0/docs/manual/wanat_multi.py +19 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/wcur1.py +7 -6
- urwid-2.6.0.post0/docs/manual/wcur2.py +13 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/wmod.py +6 -8
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/wsel.py +11 -10
- urwid-2.6.0.post0/docs/tutorial/adventure.py +109 -0
- urwid-2.6.0.post0/docs/tutorial/cmenu.py +113 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/highcolors.py +1 -1
- urwid-2.6.0.post0/docs/tutorial/hmenu.py +125 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/multiple.py +3 -2
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/qa.py +6 -3
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/sig.py +7 -5
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/smenu.py +21 -9
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/urwid_attr.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/calc.py +1 -3
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/dialog.py +5 -5
- {urwid-2.5.3 → urwid-2.6.0.post0}/pyproject.toml +17 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/setup.py +11 -23
- urwid-2.6.0.post0/tests/test_text_layout.py +404 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_util.py +4 -4
- {urwid-2.5.3 → urwid-2.6.0.post0}/tox.ini +8 -4
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/__init__.py +1 -6
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/canvas.py +41 -46
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/_raw_display_base.py +9 -9
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/curses.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/escape.py +3 -7
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/html_fragment.py +6 -8
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/web.py +5 -6
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/main_loop.py +1 -2
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/font.py +2 -2
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/listbox.py +2 -4
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/monitored_list.py +3 -3
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/signals.py +3 -6
- urwid-2.5.3/urwid/old_str_util.py → urwid-2.6.0.post0/urwid/str_util.py +61 -69
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/text_layout.py +41 -29
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/treetools.py +7 -14
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/util.py +19 -28
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/version.py +2 -2
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/attr_map.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/attr_wrap.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/box_adapter.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/edit.py +4 -3
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/filler.py +9 -10
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/grid_flow.py +1 -1
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/line_box.py +1 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/padding.py +9 -10
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/progress_bar.py +1 -2
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/text.py +16 -17
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/wimp.py +2 -2
- {urwid-2.5.3 → urwid-2.6.0.post0/urwid.egg-info}/PKG-INFO +8 -4
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid.egg-info/SOURCES.txt +2 -3
- urwid-2.5.3/.DS_Store +0 -0
- urwid-2.5.3/docs/manual/bright_combinations.py +0 -42
- urwid-2.5.3/docs/manual/safe_combinations.py +0 -45
- urwid-2.5.3/docs/manual/wanat.py +0 -24
- urwid-2.5.3/docs/manual/wanat_multi.py +0 -19
- urwid-2.5.3/docs/manual/wcur2.py +0 -13
- urwid-2.5.3/docs/tutorial/adventure.py +0 -86
- urwid-2.5.3/docs/tutorial/cmenu.py +0 -73
- urwid-2.5.3/docs/tutorial/hmenu.py +0 -84
- urwid-2.5.3/source/str_util.c +0 -1683
- urwid-2.5.3/tests/test_text_layout.py +0 -389
- {urwid-2.5.3 → urwid-2.6.0.post0}/.coveralls.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/CODE_OF_CONDUCT.md +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/ISSUE_TEMPLATE/docs.md +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/dependabot.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/labeler.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/release.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/workflows/documentation.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/workflows/labels.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.github/workflows/yamllint.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.gitignore +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/.yamllint.yml +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/COPYING +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/MANIFEST.in +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/black-requirements.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/classifiers.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/Makefile +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/changelog.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/bigtext.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/bigtext.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/bigtext1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/bigtext2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/bigtext3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/browse.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/browse1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/browse2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/edit.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/edit.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/edit1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/edit2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/edit_text.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/graph.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/graph.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/graph1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/graph2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/index.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/palette_test.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/palette_test.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/palette_test1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/palette_test2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/pop_up.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/pop_up.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/pop_up1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/pop_up2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/real_browse.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/real_edit.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/subproc.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/subproc.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/subproc1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/subproc2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/tour.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/tour.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/tour1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/examples/tour2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/index.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/bright_combinations.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/bright_combinations1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/canvascache.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/displayattributes.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/displaymodules.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/encodings.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/display_modules.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/introduction.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/urwid_widgets.svgz +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/urwid_widgets_1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/urwid_widgets_1.xcf +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/urwid_widgets_2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/urwid_widgets_2.xcf +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/images/widget_layout.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/index.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/mainloop.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/overview.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/safe_combinations.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/safe_combinations1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/textlayout.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/userinput.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/manual/widgets.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/attrspec.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/canvas.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/command_map.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/constants.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/deprecated.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/display_modules.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/exceptions.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/global_settings.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/index.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/list_walkers.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/main_loop.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/meta.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/signals.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/text_layout.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/reference/widget.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tools/compile_pngs.sh +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tools/screenshots.sh +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tools/static/.placeholder +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tools/templates/indexcontent.html +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tools/templates/indexsidebar.html +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tools/templates/localtoc.html +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/adventure.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/adventure1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/adventure2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/adventure3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/adventure4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/cmenu.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/cmenu1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/cmenu2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/cmenu3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/cmenu4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/highcolors.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/highcolors1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/hmenu.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/hmenu1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/hmenu2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/hmenu3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/hmenu4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/index.rst +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/input5.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/menu25.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/minimal.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/minimal.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/minimal1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/multiple.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/multiple1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/multiple2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/multiple3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/multiple4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/qa.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/qa1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/qa2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/qa3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/sig.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/sig1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/sig2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/sig3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/sig4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/smenu.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/smenu1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/smenu2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/smenu3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/urwid_attr.py.xdotool +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/urwid_attr1.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/urwid_attr2.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/urwid_attr3.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/tutorial/urwid_attr4.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/docs/urwid-logo.png +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/asyncio_socket_server.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/bigtext.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/browse.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/edit.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/fib.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/graph.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/input_test.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/lcd_cf635.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/palette_test.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/pop_up.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/subproc.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/subproc2.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/terminal.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/tour.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/treesample.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/twisted_serve_ssh.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/examples/twisted_serve_ssh.tac +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/isort-requirements.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/pylint-requirements.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/requirements.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/ruff-requirements.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/setup.cfg +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/test_requirements.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/__init__.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_canvas.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_columns.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_container.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_doctests.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_escapes.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_event_loops.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_filler.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_floatedit.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_font.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_graphics.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_grid_flow.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_line_box.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_listbox.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_moved_imports.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_overlay.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_padding.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_pile.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_raw_display.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_scrollable.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_signals.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_str_util.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_vterm.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/test_widget.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/tests/util.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/command_map.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/container.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/decoration.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/__init__.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/_posix_raw_display.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/_web.css +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/_web.js +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/_win32.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/_win32_raw_display.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/common.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/lcd.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/display/raw.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/__init__.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/abstract_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/asyncio_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/glib_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/select_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/tornado_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/trio_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/twisted_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/event_loop/zmq_loop.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/graphics.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/highlight.css +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/numedit.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/split_repr.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/vterm.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/__init__.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/bar_graph.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/big_text.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/columns.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/constants.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/container.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/divider.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/frame.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/overlay.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/pile.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/popup.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/scrollable.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/solid_fill.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/widget.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/widget/widget_decoration.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid/wimp.py +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid.egg-info/dependency_links.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid.egg-info/not-zip-safe +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid.egg-info/requires.txt +0 -0
- {urwid-2.5.3 → urwid-2.6.0.post0}/urwid.egg-info/top_level.txt +0 -0
|
@@ -28,7 +28,7 @@ jobs:
|
|
|
28
28
|
pip install --upgrade -r isort-requirements.txt
|
|
29
29
|
- name: Check imports with isort
|
|
30
30
|
run: |
|
|
31
|
-
isort --check --diff
|
|
31
|
+
isort --check --diff .
|
|
32
32
|
|
|
33
33
|
Black:
|
|
34
34
|
name: Validate black formatting
|
|
@@ -46,7 +46,7 @@ jobs:
|
|
|
46
46
|
pip install --upgrade -r black-requirements.txt
|
|
47
47
|
- name: Check code style with black
|
|
48
48
|
run: |
|
|
49
|
-
black --check
|
|
49
|
+
black --check .
|
|
50
50
|
|
|
51
51
|
Ruff:
|
|
52
52
|
name: Check with Ruff
|
|
@@ -64,7 +64,7 @@ jobs:
|
|
|
64
64
|
pip install --upgrade -r ruff-requirements.txt
|
|
65
65
|
- name: Lint with ruff
|
|
66
66
|
run: |
|
|
67
|
-
ruff check --output-format github
|
|
67
|
+
ruff check --output-format github .
|
|
68
68
|
|
|
69
69
|
PyLint:
|
|
70
70
|
name: Check with pylint
|
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
pip install --upgrade -r isort-requirements.txt
|
|
44
44
|
- name: Check imports with isort
|
|
45
45
|
run: |
|
|
46
|
-
isort --check --diff
|
|
46
|
+
isort --check --diff .
|
|
47
47
|
|
|
48
48
|
Black:
|
|
49
49
|
name: Validate black formatting
|
|
@@ -61,7 +61,7 @@ jobs:
|
|
|
61
61
|
pip install --upgrade -r black-requirements.txt
|
|
62
62
|
- name: Check code style with black
|
|
63
63
|
run: |
|
|
64
|
-
black --check
|
|
64
|
+
black --check .
|
|
65
65
|
|
|
66
66
|
Ruff:
|
|
67
67
|
name: Check with Ruff
|
|
@@ -79,7 +79,7 @@ jobs:
|
|
|
79
79
|
pip install --upgrade -r ruff-requirements.txt
|
|
80
80
|
- name: Lint with ruff
|
|
81
81
|
run: |
|
|
82
|
-
ruff check --output-format github
|
|
82
|
+
ruff check --output-format github .
|
|
83
83
|
|
|
84
84
|
PyLint:
|
|
85
85
|
name: Check with pylint
|
|
@@ -167,53 +167,8 @@ jobs:
|
|
|
167
167
|
with:
|
|
168
168
|
parallel-finished: true
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
name: Build
|
|
172
|
-
needs: [ Test, Isort, Black, Ruff, PyLint ]
|
|
173
|
-
# build only on push: heavy job
|
|
174
|
-
if: github.event_name == 'push' && github.repository == 'urwid/urwid'
|
|
175
|
-
runs-on: ${{ matrix.os }}
|
|
176
|
-
strategy:
|
|
177
|
-
fail-fast: false
|
|
178
|
-
matrix:
|
|
179
|
-
os:
|
|
180
|
-
- ubuntu-latest
|
|
181
|
-
- macos-latest
|
|
182
|
-
- windows-latest
|
|
183
|
-
|
|
184
|
-
steps:
|
|
185
|
-
- uses: actions/checkout@v4
|
|
186
|
-
with:
|
|
187
|
-
fetch-depth: 0 # need for setuptools_scm
|
|
188
|
-
|
|
189
|
-
# Used to host cibuildwheel
|
|
190
|
-
- uses: actions/setup-python@v5
|
|
191
|
-
with:
|
|
192
|
-
python-version: "3.11"
|
|
193
|
-
|
|
194
|
-
- name: Set up QEMU
|
|
195
|
-
if: runner.os == 'Linux'
|
|
196
|
-
uses: docker/setup-qemu-action@v3
|
|
197
|
-
with:
|
|
198
|
-
platforms: all
|
|
199
|
-
|
|
200
|
-
- name: Build wheels
|
|
201
|
-
uses: pypa/cibuildwheel@v2.16.5
|
|
202
|
-
env:
|
|
203
|
-
# configure cibuildwheel to build native archs ('auto'), and some
|
|
204
|
-
# emulated ones
|
|
205
|
-
CIBW_ARCHS_LINUX: auto aarch64
|
|
206
|
-
CIBW_ARCHS_MACOS: x86_64 universal2 arm64
|
|
207
|
-
CIBW_ARCHS_WINDOWS: auto
|
|
208
|
-
|
|
209
|
-
- uses: actions/upload-artifact@v4
|
|
210
|
-
with:
|
|
211
|
-
path: ./wheelhouse/*.whl
|
|
212
|
-
name: built-${{ matrix.os }}
|
|
213
|
-
retention-days: 3
|
|
214
|
-
|
|
215
|
-
build_sdist:
|
|
216
|
-
name: Build source distribution
|
|
170
|
+
build:
|
|
171
|
+
name: Build distribution
|
|
217
172
|
needs: [ Test, Isort, Black, Ruff, PyLint ]
|
|
218
173
|
runs-on: ubuntu-latest
|
|
219
174
|
steps:
|
|
@@ -228,8 +183,8 @@ jobs:
|
|
|
228
183
|
- name: Install dependencies
|
|
229
184
|
run: pip install -U build
|
|
230
185
|
|
|
231
|
-
- name: Build
|
|
232
|
-
run: python -m build
|
|
186
|
+
- name: Build dist
|
|
187
|
+
run: python -m build
|
|
233
188
|
|
|
234
189
|
- uses: actions/upload-artifact@v4
|
|
235
190
|
with:
|
|
@@ -237,10 +192,16 @@ jobs:
|
|
|
237
192
|
name: built-sdist
|
|
238
193
|
retention-days: 3
|
|
239
194
|
|
|
195
|
+
- uses: actions/upload-artifact@v4
|
|
196
|
+
with:
|
|
197
|
+
path: dist/*.whl
|
|
198
|
+
name: built-bdist
|
|
199
|
+
retention-days: 3
|
|
200
|
+
|
|
240
201
|
Metadata:
|
|
241
202
|
name: Validate metadata
|
|
242
203
|
runs-on: ubuntu-latest
|
|
243
|
-
needs: [
|
|
204
|
+
needs: [ build ]
|
|
244
205
|
steps:
|
|
245
206
|
- uses: actions/checkout@v4
|
|
246
207
|
- name: Set up Python
|
|
@@ -265,7 +226,7 @@ jobs:
|
|
|
265
226
|
twine check dist/*
|
|
266
227
|
|
|
267
228
|
upload_pypi:
|
|
268
|
-
needs: [
|
|
229
|
+
needs: [ build, Metadata ]
|
|
269
230
|
# upload to PyPI on every tag
|
|
270
231
|
if: github.event_name == 'push' && github.ref_type == 'tag' && github.repository == 'urwid/urwid'
|
|
271
232
|
# alternatively, to publish when a GitHub Release is created, use the following rule:
|
|
@@ -284,4 +245,4 @@ jobs:
|
|
|
284
245
|
path: dist
|
|
285
246
|
|
|
286
247
|
- name: Publish package distributions to PyPI
|
|
287
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
248
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v4.5.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-yaml
|
|
6
|
+
- id: end-of-file-fixer
|
|
7
|
+
- id: trailing-whitespace
|
|
8
|
+
- id: mixed-line-ending
|
|
9
|
+
|
|
10
|
+
- repo: https://github.com/pycqa/isort
|
|
11
|
+
rev: 5.13.2
|
|
12
|
+
hooks:
|
|
13
|
+
- id: isort
|
|
14
|
+
name: isort (python)
|
|
15
|
+
- id: isort
|
|
16
|
+
name: isort (cython)
|
|
17
|
+
types: [cython]
|
|
18
|
+
- id: isort
|
|
19
|
+
name: isort (pyi)
|
|
20
|
+
types: [pyi]
|
|
21
|
+
|
|
22
|
+
- repo: https://github.com/psf/black
|
|
23
|
+
rev: 24.2.0
|
|
24
|
+
hooks:
|
|
25
|
+
- id: black
|
|
26
|
+
|
|
27
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
28
|
+
# Ruff version.
|
|
29
|
+
rev: v0.2.1
|
|
30
|
+
hooks:
|
|
31
|
+
- id: ruff
|
|
32
|
+
args: [ --fix, --exit-non-zero-on-fix ]
|
|
33
|
+
|
|
34
|
+
- repo: https://github.com/adrienverge/yamllint.git
|
|
35
|
+
rev: v1.35.0
|
|
36
|
+
hooks:
|
|
37
|
+
- id: yamllint
|
|
38
|
+
|
|
39
|
+
- repo: https://github.com/pre-commit/pygrep-hooks
|
|
40
|
+
rev: v1.10.0 # Use the ref you want to point at
|
|
41
|
+
hooks:
|
|
42
|
+
- id: python-check-blanket-noqa
|
|
43
|
+
- id: python-check-blanket-type-ignore
|
|
44
|
+
- id: rst-directive-colons
|
|
45
|
+
- id: rst-inline-touching-normal
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: urwid
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0.post0
|
|
4
4
|
Summary: A full-featured console (xterm et al.) user interface library
|
|
5
5
|
Home-page: https://urwid.org/
|
|
6
6
|
Author-email: Ian Ward <ian@excess.org>
|
|
@@ -32,7 +32,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
32
32
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
33
33
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
34
34
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
35
|
-
Requires-Python:
|
|
35
|
+
Requires-Python: >3.7
|
|
36
36
|
Description-Content-Type: text/x-rst
|
|
37
37
|
License-File: COPYING
|
|
38
38
|
Requires-Dist: typing-extensions
|
|
@@ -57,7 +57,7 @@ Requires-Dist: pyserial; extra == "lcd"
|
|
|
57
57
|
|
|
58
58
|
Urwid
|
|
59
59
|
=====
|
|
60
|
-
|pypi| |docs| |gitter| |ci| |coveralls|
|
|
60
|
+
|pypi| |docs| |gitter| |ci| |pre-commit| |coveralls|
|
|
61
61
|
|
|
62
62
|
About
|
|
63
63
|
=====
|
|
@@ -87,7 +87,7 @@ Installation
|
|
|
87
87
|
To install using pip
|
|
88
88
|
|
|
89
89
|
.. code:: bash
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
pip install urwid
|
|
92
92
|
|
|
93
93
|
For advanced functionality extra requirements need to be installed.
|
|
@@ -323,6 +323,10 @@ Contributors
|
|
|
323
323
|
:target: https://github.com/urwid/urwid/actions
|
|
324
324
|
:alt: CI status
|
|
325
325
|
|
|
326
|
+
.. |pre-commit| image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit
|
|
327
|
+
:target: https://github.com/pre-commit/pre-commit
|
|
328
|
+
:alt: pre-commit
|
|
329
|
+
|
|
326
330
|
.. |coveralls| image:: https://coveralls.io/repos/github/urwid/urwid/badge.svg
|
|
327
331
|
:alt: test coverage
|
|
328
332
|
:target: https://coveralls.io/github/urwid/urwid
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Urwid
|
|
2
2
|
=====
|
|
3
|
-
|pypi| |docs| |gitter| |ci| |coveralls|
|
|
3
|
+
|pypi| |docs| |gitter| |ci| |pre-commit| |coveralls|
|
|
4
4
|
|
|
5
5
|
About
|
|
6
6
|
=====
|
|
@@ -30,7 +30,7 @@ Installation
|
|
|
30
30
|
To install using pip
|
|
31
31
|
|
|
32
32
|
.. code:: bash
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
pip install urwid
|
|
35
35
|
|
|
36
36
|
For advanced functionality extra requirements need to be installed.
|
|
@@ -266,6 +266,10 @@ Contributors
|
|
|
266
266
|
:target: https://github.com/urwid/urwid/actions
|
|
267
267
|
:alt: CI status
|
|
268
268
|
|
|
269
|
+
.. |pre-commit| image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit
|
|
270
|
+
:target: https://github.com/pre-commit/pre-commit
|
|
271
|
+
:alt: pre-commit
|
|
272
|
+
|
|
269
273
|
.. |coveralls| image:: https://coveralls.io/repos/github/urwid/urwid/badge.svg
|
|
270
274
|
:alt: test coverage
|
|
271
275
|
:target: https://coveralls.io/github/urwid/urwid
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
+
import ast
|
|
15
16
|
import os
|
|
16
17
|
|
|
17
18
|
# If extensions (or modules to document with autodoc) are in another directory,
|
|
@@ -51,7 +52,7 @@ master_doc = "index"
|
|
|
51
52
|
|
|
52
53
|
# General information about the project.
|
|
53
54
|
project = "Urwid"
|
|
54
|
-
copyright = "2014, Ian Ward et al"
|
|
55
|
+
copyright = "2014, Ian Ward et al" # noqa: A001 # sphinx magic
|
|
55
56
|
|
|
56
57
|
# The version info for the project you're documenting, acts as replacement for
|
|
57
58
|
# |version| and |release|, also used in various other places throughout the
|
|
@@ -61,13 +62,29 @@ VERSION_MODULE = os.path.abspath(os.path.join(FILE_PATH, "../urwid/version.py"))
|
|
|
61
62
|
VERSION_VARS = {}
|
|
62
63
|
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
with open(VERSION_MODULE, encoding="utf-8") as f:
|
|
66
|
+
parsed = ast.parse(f.read())
|
|
67
|
+
for node in parsed.body:
|
|
68
|
+
if not isinstance(node, (ast.Assign, ast.AnnAssign)):
|
|
69
|
+
# Not variable define
|
|
70
|
+
continue
|
|
68
71
|
|
|
72
|
+
if node.value is None:
|
|
73
|
+
# Not a proper assign
|
|
74
|
+
continue
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
value = ast.literal_eval(node.value)
|
|
78
|
+
except ValueError:
|
|
79
|
+
continue
|
|
80
|
+
|
|
81
|
+
if isinstance(node, ast.Assign):
|
|
82
|
+
VERSION_VARS.update(
|
|
83
|
+
{tgt.id: value for tgt in node.targets if isinstance(tgt, ast.Name) and isinstance(tgt.ctx, ast.Store)}
|
|
84
|
+
)
|
|
85
|
+
else:
|
|
86
|
+
VERSION_VARS[node.target.id] = value
|
|
69
87
|
|
|
70
|
-
execfile(VERSION_MODULE, VERSION_VARS)
|
|
71
88
|
# The short X.Y version.
|
|
72
89
|
version = ".".join(str(x) for x in VERSION_VARS["__version_tuple__"][:2])
|
|
73
90
|
# The full version, including alpha/beta/rc tags.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
import urwid
|
|
8
|
+
|
|
9
|
+
RED_FGS = (
|
|
10
|
+
"black",
|
|
11
|
+
"light gray",
|
|
12
|
+
"white",
|
|
13
|
+
"light cyan",
|
|
14
|
+
"light red",
|
|
15
|
+
"light green",
|
|
16
|
+
"yellow",
|
|
17
|
+
"light magenta",
|
|
18
|
+
)
|
|
19
|
+
GREEN_FGS = (
|
|
20
|
+
"black",
|
|
21
|
+
"light gray",
|
|
22
|
+
"dark blue",
|
|
23
|
+
"white",
|
|
24
|
+
"light cyan",
|
|
25
|
+
"light red",
|
|
26
|
+
"light green",
|
|
27
|
+
"yellow",
|
|
28
|
+
)
|
|
29
|
+
BROWN_FGS = (
|
|
30
|
+
"black",
|
|
31
|
+
"dark blue",
|
|
32
|
+
"dark gray",
|
|
33
|
+
"white",
|
|
34
|
+
"light blue",
|
|
35
|
+
"light cyan",
|
|
36
|
+
"light red",
|
|
37
|
+
"light green",
|
|
38
|
+
"yellow",
|
|
39
|
+
)
|
|
40
|
+
MAGENTA_FGS = (
|
|
41
|
+
"black",
|
|
42
|
+
"light gray",
|
|
43
|
+
"dark blue",
|
|
44
|
+
"white",
|
|
45
|
+
"light cyan",
|
|
46
|
+
"light red",
|
|
47
|
+
"light green",
|
|
48
|
+
"yellow",
|
|
49
|
+
"light magenta",
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
BG_FGS = [
|
|
53
|
+
("dark red", RED_FGS),
|
|
54
|
+
("dark green", GREEN_FGS),
|
|
55
|
+
("brown", BROWN_FGS),
|
|
56
|
+
("dark magenta", MAGENTA_FGS),
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
body = urwid.SimpleFocusListWalker([])
|
|
60
|
+
|
|
61
|
+
for bg, fgs in BG_FGS:
|
|
62
|
+
spec = urwid.AttrSpec(fgs[0], bg)
|
|
63
|
+
|
|
64
|
+
body.extend(
|
|
65
|
+
(
|
|
66
|
+
urwid.AttrMap(urwid.Divider(), spec),
|
|
67
|
+
urwid.AttrMap(
|
|
68
|
+
urwid.GridFlow(
|
|
69
|
+
(urwid.AttrMap(urwid.Text(f"'{fg}' on '{bg}'"), urwid.AttrSpec(fg, bg)) for fg in fgs),
|
|
70
|
+
35,
|
|
71
|
+
0,
|
|
72
|
+
0,
|
|
73
|
+
urwid.LEFT,
|
|
74
|
+
),
|
|
75
|
+
spec,
|
|
76
|
+
),
|
|
77
|
+
urwid.AttrMap(urwid.Divider(), spec),
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
try:
|
|
82
|
+
urwid.MainLoop(urwid.ListBox(body)).run()
|
|
83
|
+
except KeyboardInterrupt:
|
|
84
|
+
sys.exit(0)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
import urwid
|
|
8
|
+
|
|
9
|
+
BLACK_FGS = (
|
|
10
|
+
"light gray",
|
|
11
|
+
"dark cyan",
|
|
12
|
+
"dark red",
|
|
13
|
+
"dark green",
|
|
14
|
+
"dark magenta",
|
|
15
|
+
"white",
|
|
16
|
+
"light blue",
|
|
17
|
+
"light cyan",
|
|
18
|
+
"light red",
|
|
19
|
+
"light green",
|
|
20
|
+
"yellow",
|
|
21
|
+
"light magenta",
|
|
22
|
+
)
|
|
23
|
+
GRAY_FGS = (
|
|
24
|
+
"black",
|
|
25
|
+
"dark blue",
|
|
26
|
+
"dark cyan",
|
|
27
|
+
"dark red",
|
|
28
|
+
"dark green",
|
|
29
|
+
"dark magenta",
|
|
30
|
+
"white",
|
|
31
|
+
"light red",
|
|
32
|
+
"yellow",
|
|
33
|
+
"light magenta",
|
|
34
|
+
)
|
|
35
|
+
BLUE_FGS = (
|
|
36
|
+
"light gray",
|
|
37
|
+
"dark cyan",
|
|
38
|
+
"white",
|
|
39
|
+
"light cyan",
|
|
40
|
+
"light red",
|
|
41
|
+
"light green",
|
|
42
|
+
"yellow",
|
|
43
|
+
"light magenta",
|
|
44
|
+
)
|
|
45
|
+
CYAN_FGS = (
|
|
46
|
+
"black",
|
|
47
|
+
"light gray",
|
|
48
|
+
"dark blue",
|
|
49
|
+
"white",
|
|
50
|
+
"light cyan",
|
|
51
|
+
"light green",
|
|
52
|
+
"yellow",
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
BG_FGS = [
|
|
56
|
+
("black", BLACK_FGS),
|
|
57
|
+
("light gray", GRAY_FGS),
|
|
58
|
+
("dark blue", BLUE_FGS),
|
|
59
|
+
("dark cyan", CYAN_FGS),
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
body = urwid.SimpleFocusListWalker([])
|
|
63
|
+
|
|
64
|
+
for bg, fgs in BG_FGS:
|
|
65
|
+
spec = urwid.AttrSpec(fgs[0], bg)
|
|
66
|
+
|
|
67
|
+
body.extend(
|
|
68
|
+
(
|
|
69
|
+
urwid.AttrMap(urwid.Divider(), spec),
|
|
70
|
+
urwid.AttrMap(
|
|
71
|
+
urwid.GridFlow(
|
|
72
|
+
(urwid.AttrMap(urwid.Text(f"'{fg}' on '{bg}'"), urwid.AttrSpec(fg, bg)) for fg in fgs),
|
|
73
|
+
35,
|
|
74
|
+
0,
|
|
75
|
+
0,
|
|
76
|
+
urwid.LEFT,
|
|
77
|
+
),
|
|
78
|
+
spec,
|
|
79
|
+
),
|
|
80
|
+
urwid.AttrMap(urwid.Divider(), spec),
|
|
81
|
+
)
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
try:
|
|
85
|
+
urwid.MainLoop(urwid.ListBox(body)).run()
|
|
86
|
+
except KeyboardInterrupt:
|
|
87
|
+
sys.exit(0)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import urwid
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Pudding(urwid.Widget):
|
|
7
|
+
_sizing = frozenset((urwid.FLOW,))
|
|
8
|
+
|
|
9
|
+
def rows(self, size: tuple[int], focus: bool = False) -> int:
|
|
10
|
+
return 1
|
|
11
|
+
|
|
12
|
+
def render(self, size: tuple[int], focus: bool = False) -> urwid.TextCanvas:
|
|
13
|
+
(maxcol,) = size
|
|
14
|
+
num_pudding = maxcol // len("Pudding")
|
|
15
|
+
return urwid.TextCanvas([b"Pudding" * num_pudding], maxcol=maxcol)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class BoxPudding(urwid.Widget):
|
|
19
|
+
_sizing = frozenset((urwid.BOX,))
|
|
20
|
+
|
|
21
|
+
def render(self, size: tuple[int, int], focus: bool = False) -> urwid.TextCanvas:
|
|
22
|
+
(maxcol, maxrow) = size
|
|
23
|
+
num_pudding = maxcol // len("Pudding")
|
|
24
|
+
return urwid.TextCanvas([b"Pudding" * num_pudding] * maxrow, maxcol=maxcol)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import urwid
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MultiPudding(urwid.Widget):
|
|
7
|
+
_sizing = frozenset((urwid.FLOW, urwid.BOX))
|
|
8
|
+
|
|
9
|
+
def rows(self, size: tuple[int], focus: bool = False) -> int:
|
|
10
|
+
return 1
|
|
11
|
+
|
|
12
|
+
def render(self, size: tuple[int], focus: bool = False) -> urwid.TextCanvas:
|
|
13
|
+
if len(size) == 1:
|
|
14
|
+
(maxcol,) = size
|
|
15
|
+
maxrow = 1
|
|
16
|
+
else:
|
|
17
|
+
(maxcol, maxrow) = size
|
|
18
|
+
num_pudding = maxcol // len("Pudding")
|
|
19
|
+
return urwid.TextCanvas([b"Pudding" * num_pudding] * maxrow, maxcol=maxcol)
|
|
@@ -11,23 +11,23 @@ class CursorPudding(urwid.Widget):
|
|
|
11
11
|
super().__init__()
|
|
12
12
|
self.cursor_col = 0
|
|
13
13
|
|
|
14
|
-
def rows(self, size, focus=False):
|
|
14
|
+
def rows(self, size: tuple[int], focus: bool = False) -> int:
|
|
15
15
|
return 1
|
|
16
16
|
|
|
17
|
-
def render(self, size, focus=False):
|
|
17
|
+
def render(self, size: tuple[int], focus: bool = False) -> urwid.TextCanvas:
|
|
18
18
|
(maxcol,) = size
|
|
19
|
-
num_pudding = maxcol
|
|
19
|
+
num_pudding = maxcol // len("Pudding")
|
|
20
20
|
cursor = None
|
|
21
21
|
if focus:
|
|
22
22
|
cursor = self.get_cursor_coords(size)
|
|
23
|
-
return urwid.TextCanvas(["Pudding" * num_pudding], [], cursor, maxcol)
|
|
23
|
+
return urwid.TextCanvas([b"Pudding" * num_pudding], [], cursor=cursor, maxcol=maxcol)
|
|
24
24
|
|
|
25
|
-
def get_cursor_coords(self, size):
|
|
25
|
+
def get_cursor_coords(self, size: tuple[int]) -> tuple[int, int]:
|
|
26
26
|
(maxcol,) = size
|
|
27
27
|
col = min(self.cursor_col, maxcol - 1)
|
|
28
28
|
return col, 0
|
|
29
29
|
|
|
30
|
-
def keypress(self, size, key):
|
|
30
|
+
def keypress(self, size: tuple[int], key: str) -> str | None:
|
|
31
31
|
(maxcol,) = size
|
|
32
32
|
if key == "left":
|
|
33
33
|
col = self.cursor_col - 1
|
|
@@ -37,3 +37,4 @@ class CursorPudding(urwid.Widget):
|
|
|
37
37
|
return key
|
|
38
38
|
self.cursor_x = max(0, min(maxcol - 1, col))
|
|
39
39
|
self._invalidate()
|
|
40
|
+
return None
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import urwid
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Widget(urwid.ListBox):
|
|
7
|
+
def get_pref_col(self, size: tuple[int, int]) -> int:
|
|
8
|
+
return self.cursor_x
|
|
9
|
+
|
|
10
|
+
def move_cursor_to_coords(self, size: tuple[int, int], col: int, row: int) -> bool:
|
|
11
|
+
assert row == 0 # noqa: S101 # in examples we can use `assert`
|
|
12
|
+
self.cursor_x = col
|
|
13
|
+
return True
|
|
@@ -3,16 +3,14 @@ from __future__ import annotations
|
|
|
3
3
|
import urwid
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class QuestionnaireItem(urwid.WidgetWrap):
|
|
7
|
-
def __init__(self):
|
|
8
|
-
self.options = []
|
|
6
|
+
class QuestionnaireItem(urwid.WidgetWrap[urwid.GridFlow]):
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
self.options: list[urwid.RadioButton] = []
|
|
9
9
|
unsure = urwid.RadioButton(self.options, "Unsure")
|
|
10
10
|
yes = urwid.RadioButton(self.options, "Yes")
|
|
11
11
|
no = urwid.RadioButton(self.options, "No")
|
|
12
12
|
display_widget = urwid.GridFlow([unsure, yes, no], 15, 3, 1, "left")
|
|
13
|
-
|
|
13
|
+
super().__init__(display_widget)
|
|
14
14
|
|
|
15
|
-
def get_state(self):
|
|
16
|
-
for o in self.options
|
|
17
|
-
if o.get_state() is True:
|
|
18
|
-
return o.get_label()
|
|
15
|
+
def get_state(self) -> str:
|
|
16
|
+
return next(o.label for o in self.options if o.state is True)
|
|
@@ -4,28 +4,28 @@ import urwid
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class SelectablePudding(urwid.Widget):
|
|
7
|
-
_sizing = frozenset(
|
|
7
|
+
_sizing = frozenset((urwid.FLOW,))
|
|
8
8
|
_selectable = True
|
|
9
9
|
|
|
10
|
-
def __init__(self):
|
|
10
|
+
def __init__(self) -> None:
|
|
11
11
|
super().__init__()
|
|
12
12
|
self.pudding = "pudding"
|
|
13
13
|
|
|
14
|
-
def rows(self, size, focus=False):
|
|
14
|
+
def rows(self, size: tuple[int], focus: bool = False) -> int:
|
|
15
15
|
return 1
|
|
16
16
|
|
|
17
|
-
def render(self, size, focus=False):
|
|
17
|
+
def render(self, size: tuple[int], focus: bool = False) -> urwid.TextCanvas:
|
|
18
18
|
(maxcol,) = size
|
|
19
|
-
num_pudding = maxcol
|
|
19
|
+
num_pudding = maxcol // len(self.pudding)
|
|
20
20
|
pudding = self.pudding
|
|
21
21
|
if focus:
|
|
22
22
|
pudding = pudding.upper()
|
|
23
|
-
return urwid.TextCanvas([pudding * num_pudding], maxcol=maxcol)
|
|
23
|
+
return urwid.TextCanvas([pudding.encode("utf-8") * num_pudding], maxcol=maxcol)
|
|
24
24
|
|
|
25
|
-
def keypress(self, size, key):
|
|
26
|
-
(maxcol,) = size
|
|
25
|
+
def keypress(self, size: tuple[int], key: str) -> str | None:
|
|
27
26
|
if len(key) > 1:
|
|
28
27
|
return key
|
|
28
|
+
|
|
29
29
|
if key.lower() in self.pudding:
|
|
30
30
|
# remove letter from pudding
|
|
31
31
|
n = self.pudding.index(key.lower())
|
|
@@ -33,5 +33,6 @@ class SelectablePudding(urwid.Widget):
|
|
|
33
33
|
if not self.pudding:
|
|
34
34
|
self.pudding = "pudding"
|
|
35
35
|
self._invalidate()
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
return key
|