rndusr / stig

TUI and CLI for the BitTorrent client Transmission
GNU General Public License v3.0
558 stars 24 forks source link

FAILED tests/completion_test/classes_test.py::TestCandidates::test_candidates_are_sorted_case_insensitively #214

Open ju1m opened 3 years ago

ju1m commented 3 years ago
$ git describe 
22.05-pre-923-g942eb9a335b

$ nix -L eval -f . stig.version                                         
"0.12.2a0"

$ nix -L build -f . stig
stig> Sourcing python-remove-tests-dir-hook
stig> Sourcing python-catch-conflicts-hook.sh
stig> Sourcing python-remove-bin-bytecode-hook.sh
stig> Sourcing setuptools-build-hook
stig> Using setuptoolsBuildPhase
stig> Using setuptoolsShellHook
stig> Sourcing pip-install-hook
stig> Using pipInstallPhase
stig> Sourcing python-imports-check-hook.sh
stig> Using pythonImportsCheckPhase
stig> Sourcing python-namespaces-hook
stig> Sourcing setuptools-check-hook
stig> Sourcing pytest-check-hook
stig> Using pytestCheckPhase
stig> unpacking sources
stig> unpacking source archive /nix/store/vmp6qi4ki5hrvqahfka8a8bl5vrwnmy9-source
stig> source root is source
stig> setting SOURCE_DATE_EPOCH to timestamp 315619200 of file source/tox.ini
stig> patching sources
stig> configuring
stig> no configure script, doing nothing
stig> building
stig> Executing setuptoolsBuildPhase
stig> setup.py:12: UserWarning: No module named 'pypandoc'
stig>   warnings.warn(str(e))
stig> /build/source/nix_run_setup:8: UserWarning: long_description is empty.
stig>   exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))
stig> running bdist_wheel
stig> running build
stig> running build_py
stig> creating build
stig> creating build/lib
stig> creating build/lib/stig
stig> copying stig/objects.py -> build/lib/stig
stig> copying stig/main.py -> build/lib/stig
stig> copying stig/logging.py -> build/lib/stig
stig> copying stig/hooks.py -> build/lib/stig
stig> copying stig/helpmgr.py -> build/lib/stig
stig> copying stig/cliopts.py -> build/lib/stig
stig> copying stig/__main__.py -> build/lib/stig
stig> copying stig/__init__.py -> build/lib/stig
stig> creating build/lib/stig/views
stig> copying stig/views/tracker.py -> build/lib/stig/views
stig> copying stig/views/torrent.py -> build/lib/stig/views
stig> copying stig/views/setting.py -> build/lib/stig/views
stig> copying stig/views/peer.py -> build/lib/stig/views
stig> copying stig/views/file.py -> build/lib/stig/views
stig> copying stig/views/details.py -> build/lib/stig/views
stig> copying stig/views/__init__.py -> build/lib/stig/views
stig> creating build/lib/stig/tui
stig> copying stig/tui/urwidpatches.py -> build/lib/stig/tui
stig> copying stig/tui/tuiobjects.py -> build/lib/stig/tui
stig> copying stig/tui/theme.py -> build/lib/stig/tui
stig> copying stig/tui/tabs.py -> build/lib/stig/tui
stig> copying stig/tui/table.py -> build/lib/stig/tui
stig> copying stig/tui/scroll.py -> build/lib/stig/tui
stig> copying stig/tui/miscwidgets.py -> build/lib/stig/tui
stig> copying stig/tui/main.py -> build/lib/stig/tui
stig> copying stig/tui/logger.py -> build/lib/stig/tui
stig> copying stig/tui/keymap.py -> build/lib/stig/tui
stig> copying stig/tui/hooks.py -> build/lib/stig/tui
stig> copying stig/tui/group.py -> build/lib/stig/tui
stig> copying stig/tui/completer.py -> build/lib/stig/tui
stig> copying stig/tui/cli.py -> build/lib/stig/tui
stig> copying stig/tui/__init__.py -> build/lib/stig/tui
stig> creating build/lib/stig/utils
stig> copying stig/utils/usertypes.py -> build/lib/stig/utils
stig> copying stig/utils/string.py -> build/lib/stig/utils
stig> copying stig/utils/expandtabs.py -> build/lib/stig/utils
stig> copying stig/utils/cliparser.py -> build/lib/stig/utils
stig> copying stig/utils/_converter.py -> build/lib/stig/utils
stig> copying stig/utils/__init__.py -> build/lib/stig/utils
stig> creating build/lib/stig/settings
stig> copying stig/settings/settings.py -> build/lib/stig/settings
stig> copying stig/settings/rcfile.py -> build/lib/stig/settings
stig> copying stig/settings/defaults.py -> build/lib/stig/settings
stig> copying stig/settings/__init__.py -> build/lib/stig/settings
stig> creating build/lib/stig/completion
stig> copying stig/completion/candidates.py -> build/lib/stig/completion
stig> copying stig/completion/_utils.py -> build/lib/stig/completion
stig> copying stig/completion/__init__.py -> build/lib/stig/completion
stig> creating build/lib/stig/commands
stig> copying stig/commands/guess_ui.py -> build/lib/stig/commands
stig> copying stig/commands/cmdmanager.py -> build/lib/stig/commands
stig> copying stig/commands/cmderror.py -> build/lib/stig/commands
stig> copying stig/commands/cmdbase.py -> build/lib/stig/commands
stig> copying stig/commands/utils.py -> build/lib/stig/commands
stig> copying stig/commands/__init__.py -> build/lib/stig/commands
stig> creating build/lib/stig/client
stig> copying stig/client/utils.py -> build/lib/stig/client
stig> copying stig/client/ttypes.py -> build/lib/stig/client
stig> copying stig/client/trequestpool.py -> build/lib/stig/client
stig> copying stig/client/rdns.py -> build/lib/stig/client
stig> copying stig/client/poll.py -> build/lib/stig/client
stig> copying stig/client/errors.py -> build/lib/stig/client
stig> copying stig/client/constants.py -> build/lib/stig/client
stig> copying stig/client/base.py -> build/lib/stig/client
stig> copying stig/client/api.py -> build/lib/stig/client
stig> copying stig/client/__init__.py -> build/lib/stig/client
stig> creating build/lib/stig/tui/views
stig> copying stig/tui/views/utils.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/tracker_list.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/tracker.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/torrent_list.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/torrent.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/text.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/setting_list.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/setting.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/peer_list.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/peer.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/hooks.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/file_list.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/file.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/details.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/common_columns.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/base.py -> build/lib/stig/tui/views
stig> copying stig/tui/views/__init__.py -> build/lib/stig/tui/views
stig> creating build/lib/stig/commands/tui
stig> copying stig/commands/tui/tui.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/tracker.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/torrent.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/peer.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/misc.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/file.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/config.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/_mixin.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/_common.py -> build/lib/stig/commands/tui
stig> copying stig/commands/tui/__init__.py -> build/lib/stig/commands/tui
stig> creating build/lib/stig/commands/base
stig> copying stig/commands/base/config.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/_mixin.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/_common.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/__init__.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/tracker.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/torrent.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/peer.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/misc.py -> build/lib/stig/commands/base
stig> copying stig/commands/base/file.py -> build/lib/stig/commands/base
stig> creating build/lib/stig/commands/cli
stig> copying stig/commands/cli/tracker.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/torrent.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/peer.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/misc.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/file.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/config.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/_table.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/_mixin.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/_common.py -> build/lib/stig/commands/cli
stig> copying stig/commands/cli/__init__.py -> build/lib/stig/commands/cli
stig> creating build/lib/stig/client/sorters
stig> copying stig/client/sorters/tracker.py -> build/lib/stig/client/sorters
stig> copying stig/client/sorters/torrent.py -> build/lib/stig/client/sorters
stig> copying stig/client/sorters/setting.py -> build/lib/stig/client/sorters
stig> copying stig/client/sorters/peer.py -> build/lib/stig/client/sorters
stig> copying stig/client/sorters/base.py -> build/lib/stig/client/sorters
stig> copying stig/client/sorters/__init__.py -> build/lib/stig/client/sorters
stig> creating build/lib/stig/client/filters
stig> copying stig/client/filters/utils.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/tracker.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/torrent.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/setting.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/peer.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/file.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/base.py -> build/lib/stig/client/filters
stig> copying stig/client/filters/__init__.py -> build/lib/stig/client/filters
stig> creating build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/torrent.py -> build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/rpc.py -> build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/api_torrent.py -> build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/api_status.py -> build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/api_settings.py -> build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/api_freespace.py -> build/lib/stig/client/aiotransmission
stig> copying stig/client/aiotransmission/__init__.py -> build/lib/stig/client/aiotransmission
stig> copying stig/settings/default.theme -> build/lib/stig/settings
stig> installing to build/bdist.linux-x86_64/wheel
stig> running install
stig> running install_lib
stig> creating build/bdist.linux-x86_64
stig> creating build/bdist.linux-x86_64/wheel
stig> creating build/bdist.linux-x86_64/wheel/stig
stig> creating build/bdist.linux-x86_64/wheel/stig/client
stig> creating build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/__init__.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/api_freespace.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/api_settings.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/api_status.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/api_torrent.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/rpc.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> copying build/lib/stig/client/aiotransmission/torrent.py -> build/bdist.linux-x86_64/wheel/stig/client/aiotransmission
stig> creating build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/__init__.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/base.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/file.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/peer.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/setting.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/torrent.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/tracker.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> copying build/lib/stig/client/filters/utils.py -> build/bdist.linux-x86_64/wheel/stig/client/filters
stig> creating build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/sorters/__init__.py -> build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/sorters/base.py -> build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/sorters/peer.py -> build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/sorters/setting.py -> build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/sorters/torrent.py -> build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/sorters/tracker.py -> build/bdist.linux-x86_64/wheel/stig/client/sorters
stig> copying build/lib/stig/client/__init__.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/api.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/base.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/constants.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/errors.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/poll.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/rdns.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/trequestpool.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/ttypes.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> copying build/lib/stig/client/utils.py -> build/bdist.linux-x86_64/wheel/stig/client
stig> creating build/bdist.linux-x86_64/wheel/stig/commands
stig> creating build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/__init__.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/_common.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/_mixin.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/_table.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/config.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/file.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/misc.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/peer.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/torrent.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> copying build/lib/stig/commands/cli/tracker.py -> build/bdist.linux-x86_64/wheel/stig/commands/cli
stig> creating build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/file.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/misc.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/peer.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/torrent.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/tracker.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/__init__.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/_common.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/_mixin.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> copying build/lib/stig/commands/base/config.py -> build/bdist.linux-x86_64/wheel/stig/commands/base
stig> creating build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/__init__.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/_common.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/_mixin.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/config.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/file.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/misc.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/peer.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/torrent.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/tracker.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/tui/tui.py -> build/bdist.linux-x86_64/wheel/stig/commands/tui
stig> copying build/lib/stig/commands/__init__.py -> build/bdist.linux-x86_64/wheel/stig/commands
stig> copying build/lib/stig/commands/utils.py -> build/bdist.linux-x86_64/wheel/stig/commands
stig> copying build/lib/stig/commands/cmdbase.py -> build/bdist.linux-x86_64/wheel/stig/commands
stig> copying build/lib/stig/commands/cmderror.py -> build/bdist.linux-x86_64/wheel/stig/commands
stig> copying build/lib/stig/commands/cmdmanager.py -> build/bdist.linux-x86_64/wheel/stig/commands
stig> copying build/lib/stig/commands/guess_ui.py -> build/bdist.linux-x86_64/wheel/stig/commands
stig> creating build/bdist.linux-x86_64/wheel/stig/completion
stig> copying build/lib/stig/completion/__init__.py -> build/bdist.linux-x86_64/wheel/stig/completion
stig> copying build/lib/stig/completion/_utils.py -> build/bdist.linux-x86_64/wheel/stig/completion
stig> copying build/lib/stig/completion/candidates.py -> build/bdist.linux-x86_64/wheel/stig/completion
stig> creating build/bdist.linux-x86_64/wheel/stig/settings
stig> copying build/lib/stig/settings/default.theme -> build/bdist.linux-x86_64/wheel/stig/settings
stig> copying build/lib/stig/settings/__init__.py -> build/bdist.linux-x86_64/wheel/stig/settings
stig> copying build/lib/stig/settings/defaults.py -> build/bdist.linux-x86_64/wheel/stig/settings
stig> copying build/lib/stig/settings/rcfile.py -> build/bdist.linux-x86_64/wheel/stig/settings
stig> copying build/lib/stig/settings/settings.py -> build/bdist.linux-x86_64/wheel/stig/settings
stig> creating build/bdist.linux-x86_64/wheel/stig/utils
stig> copying build/lib/stig/utils/__init__.py -> build/bdist.linux-x86_64/wheel/stig/utils
stig> copying build/lib/stig/utils/_converter.py -> build/bdist.linux-x86_64/wheel/stig/utils
stig> copying build/lib/stig/utils/cliparser.py -> build/bdist.linux-x86_64/wheel/stig/utils
stig> copying build/lib/stig/utils/expandtabs.py -> build/bdist.linux-x86_64/wheel/stig/utils
stig> copying build/lib/stig/utils/string.py -> build/bdist.linux-x86_64/wheel/stig/utils
stig> copying build/lib/stig/utils/usertypes.py -> build/bdist.linux-x86_64/wheel/stig/utils
stig> creating build/bdist.linux-x86_64/wheel/stig/tui
stig> creating build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/__init__.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/base.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/common_columns.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/details.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/file.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/file_list.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/hooks.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/peer.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/peer_list.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/setting.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/setting_list.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/text.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/torrent.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/torrent_list.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/tracker.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/tracker_list.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/views/utils.py -> build/bdist.linux-x86_64/wheel/stig/tui/views
stig> copying build/lib/stig/tui/__init__.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/cli.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/completer.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/group.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/hooks.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/keymap.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/logger.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/main.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/miscwidgets.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/scroll.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/table.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/tabs.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/theme.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/tuiobjects.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> copying build/lib/stig/tui/urwidpatches.py -> build/bdist.linux-x86_64/wheel/stig/tui
stig> creating build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/__init__.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/details.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/file.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/peer.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/setting.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/torrent.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/views/tracker.py -> build/bdist.linux-x86_64/wheel/stig/views
stig> copying build/lib/stig/__init__.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/__main__.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/cliopts.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/helpmgr.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/hooks.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/logging.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/main.py -> build/bdist.linux-x86_64/wheel/stig
stig> copying build/lib/stig/objects.py -> build/bdist.linux-x86_64/wheel/stig
stig> running install_egg_info
stig> running egg_info
stig> creating stig.egg-info
stig> writing stig.egg-info/PKG-INFO
stig> writing dependency_links to stig.egg-info/dependency_links.txt
stig> writing entry points to stig.egg-info/entry_points.txt
stig> writing requirements to stig.egg-info/requires.txt
stig> writing top-level names to stig.egg-info/top_level.txt
stig> writing manifest file 'stig.egg-info/SOURCES.txt'
stig> reading manifest file 'stig.egg-info/SOURCES.txt'
stig> adding license file 'LICENSE'
stig> writing manifest file 'stig.egg-info/SOURCES.txt'
stig> Copying stig.egg-info to build/bdist.linux-x86_64/wheel/stig-0.12.2a0-py3.9.egg-info
stig> running install_scripts
stig> adding license file "LICENSE" (matched pattern "LICEN[CS]E*")
stig> creating build/bdist.linux-x86_64/wheel/stig-0.12.2a0.dist-info/WHEEL
stig> creating 'dist/stig-0.12.2a0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
stig> adding 'stig/__init__.py'
stig> adding 'stig/__main__.py'
stig> adding 'stig/cliopts.py'
stig> adding 'stig/helpmgr.py'
stig> adding 'stig/hooks.py'
stig> adding 'stig/logging.py'
stig> adding 'stig/main.py'
stig> adding 'stig/objects.py'
stig> adding 'stig/client/__init__.py'
stig> adding 'stig/client/api.py'
stig> adding 'stig/client/base.py'
stig> adding 'stig/client/constants.py'
stig> adding 'stig/client/errors.py'
stig> adding 'stig/client/poll.py'
stig> adding 'stig/client/rdns.py'
stig> adding 'stig/client/trequestpool.py'
stig> adding 'stig/client/ttypes.py'
stig> adding 'stig/client/utils.py'
stig> adding 'stig/client/aiotransmission/__init__.py'
stig> adding 'stig/client/aiotransmission/api_freespace.py'
stig> adding 'stig/client/aiotransmission/api_settings.py'
stig> adding 'stig/client/aiotransmission/api_status.py'
stig> adding 'stig/client/aiotransmission/api_torrent.py'
stig> adding 'stig/client/aiotransmission/rpc.py'
stig> adding 'stig/client/aiotransmission/torrent.py'
stig> adding 'stig/client/filters/__init__.py'
stig> adding 'stig/client/filters/base.py'
stig> adding 'stig/client/filters/file.py'
stig> adding 'stig/client/filters/peer.py'
stig> adding 'stig/client/filters/setting.py'
stig> adding 'stig/client/filters/torrent.py'
stig> adding 'stig/client/filters/tracker.py'
stig> adding 'stig/client/filters/utils.py'
stig> adding 'stig/client/sorters/__init__.py'
stig> adding 'stig/client/sorters/base.py'
stig> adding 'stig/client/sorters/peer.py'
stig> adding 'stig/client/sorters/setting.py'
stig> adding 'stig/client/sorters/torrent.py'
stig> adding 'stig/client/sorters/tracker.py'
stig> adding 'stig/commands/__init__.py'
stig> adding 'stig/commands/cmdbase.py'
stig> adding 'stig/commands/cmderror.py'
stig> adding 'stig/commands/cmdmanager.py'
stig> adding 'stig/commands/guess_ui.py'
stig> adding 'stig/commands/utils.py'
stig> adding 'stig/commands/base/__init__.py'
stig> adding 'stig/commands/base/_common.py'
stig> adding 'stig/commands/base/_mixin.py'
stig> adding 'stig/commands/base/config.py'
stig> adding 'stig/commands/base/file.py'
stig> adding 'stig/commands/base/misc.py'
stig> adding 'stig/commands/base/peer.py'
stig> adding 'stig/commands/base/torrent.py'
stig> adding 'stig/commands/base/tracker.py'
stig> adding 'stig/commands/cli/__init__.py'
stig> adding 'stig/commands/cli/_common.py'
stig> adding 'stig/commands/cli/_mixin.py'
stig> adding 'stig/commands/cli/_table.py'
stig> adding 'stig/commands/cli/config.py'
stig> adding 'stig/commands/cli/file.py'
stig> adding 'stig/commands/cli/misc.py'
stig> adding 'stig/commands/cli/peer.py'
stig> adding 'stig/commands/cli/torrent.py'
stig> adding 'stig/commands/cli/tracker.py'
stig> adding 'stig/commands/tui/__init__.py'
stig> adding 'stig/commands/tui/_common.py'
stig> adding 'stig/commands/tui/_mixin.py'
stig> adding 'stig/commands/tui/config.py'
stig> adding 'stig/commands/tui/file.py'
stig> adding 'stig/commands/tui/misc.py'
stig> adding 'stig/commands/tui/peer.py'
stig> adding 'stig/commands/tui/torrent.py'
stig> adding 'stig/commands/tui/tracker.py'
stig> adding 'stig/commands/tui/tui.py'
stig> adding 'stig/completion/__init__.py'
stig> adding 'stig/completion/_utils.py'
stig> adding 'stig/completion/candidates.py'
stig> adding 'stig/settings/__init__.py'
stig> adding 'stig/settings/default.theme'
stig> adding 'stig/settings/defaults.py'
stig> adding 'stig/settings/rcfile.py'
stig> adding 'stig/settings/settings.py'
stig> adding 'stig/tui/__init__.py'
stig> adding 'stig/tui/cli.py'
stig> adding 'stig/tui/completer.py'
stig> adding 'stig/tui/group.py'
stig> adding 'stig/tui/hooks.py'
stig> adding 'stig/tui/keymap.py'
stig> adding 'stig/tui/logger.py'
stig> adding 'stig/tui/main.py'
stig> adding 'stig/tui/miscwidgets.py'
stig> adding 'stig/tui/scroll.py'
stig> adding 'stig/tui/table.py'
stig> adding 'stig/tui/tabs.py'
stig> adding 'stig/tui/theme.py'
stig> adding 'stig/tui/tuiobjects.py'
stig> adding 'stig/tui/urwidpatches.py'
stig> adding 'stig/tui/views/__init__.py'
stig> adding 'stig/tui/views/base.py'
stig> adding 'stig/tui/views/common_columns.py'
stig> adding 'stig/tui/views/details.py'
stig> adding 'stig/tui/views/file.py'
stig> adding 'stig/tui/views/file_list.py'
stig> adding 'stig/tui/views/hooks.py'
stig> adding 'stig/tui/views/peer.py'
stig> adding 'stig/tui/views/peer_list.py'
stig> adding 'stig/tui/views/setting.py'
stig> adding 'stig/tui/views/setting_list.py'
stig> adding 'stig/tui/views/text.py'
stig> adding 'stig/tui/views/torrent.py'
stig> adding 'stig/tui/views/torrent_list.py'
stig> adding 'stig/tui/views/tracker.py'
stig> adding 'stig/tui/views/tracker_list.py'
stig> adding 'stig/tui/views/utils.py'
stig> adding 'stig/utils/__init__.py'
stig> adding 'stig/utils/_converter.py'
stig> adding 'stig/utils/cliparser.py'
stig> adding 'stig/utils/expandtabs.py'
stig> adding 'stig/utils/string.py'
stig> adding 'stig/utils/usertypes.py'
stig> adding 'stig/views/__init__.py'
stig> adding 'stig/views/details.py'
stig> adding 'stig/views/file.py'
stig> adding 'stig/views/peer.py'
stig> adding 'stig/views/setting.py'
stig> adding 'stig/views/torrent.py'
stig> adding 'stig/views/tracker.py'
stig> adding 'stig-0.12.2a0.dist-info/LICENSE'
stig> adding 'stig-0.12.2a0.dist-info/METADATA'
stig> adding 'stig-0.12.2a0.dist-info/WHEEL'
stig> adding 'stig-0.12.2a0.dist-info/entry_points.txt'
stig> adding 'stig-0.12.2a0.dist-info/top_level.txt'
stig> adding 'stig-0.12.2a0.dist-info/RECORD'
stig> removing build/bdist.linux-x86_64/wheel
stig> Finished executing setuptoolsBuildPhase
stig> installing
stig> Executing pipInstallPhase
stig> /build/source/dist /build/source
stig> Processing ./stig-0.12.2a0-py3-none-any.whl
stig> Requirement already satisfied: pyxdg in /nix/store/148slys7x7jasgm68nzn43pknx58r26x-python3.9-pyxdg-0.27/lib/python3.9/site-packages (from stig==0.12.2a0) (0.27)
stig> Requirement already satisfied: urwidtrees>=1.0.3dev0 in /nix/store/4fg4gy5rj3q5azgq41fzc8k3jmmbp0fg-python3.9-urwidtrees-1.0.3/lib/python3.9/site-packages (from stig==0.12.2a0) (1.0.3)
stig> Requirement already satisfied: async-timeout in /nix/store/vxydfm1bhbzr0vbas4ajhlx21kr5nw3m-python3.9-async-timeout-4.0.1/lib/python3.9/site-packages (from stig==0.12.2a0) (4.0.1)
stig> Requirement already satisfied: urwid>=2.0 in /nix/store/dv26j7igndaxp9zyahcbqxdciqllg93x-python3.9-urwid-2.1.2/lib/python3.9/site-packages (from stig==0.12.2a0) (2.1.2)
stig> Requirement already satisfied: blinker in /nix/store/48nl43nyrzkyx6rl8vk10ky1mynl9r67-python3.9-blinker-1.4/lib/python3.9/site-packages (from stig==0.12.2a0) (1.4)
stig> Requirement already satisfied: aiohttp<4,>=3 in /nix/store/my82x39dchn0jp810nliflnrf6bvld4b-python3.9-aiohttp-3.8.0/lib/python3.9/site-packages (from stig==0.12.2a0) (3.8.0)
stig> Requirement already satisfied: natsort in /nix/store/h2h7pqpspz8r20x125583lgq9mbxfxdf-python3.9-natsort-7.1.1/lib/python3.9/site-packages (from stig==0.12.2a0) (7.1.1)
stig> Requirement already satisfied: multidict<7.0,>=4.5 in /nix/store/3wl0gcaj3c5azmi73vjgqvmw378x8i44-python3.9-multidict-5.2.0/lib/python3.9/site-packages (from aiohttp<4,>=3->stig==0.12.2a0) (5.2.0)
stig> Requirement already satisfied: frozenlist>=1.1.1 in /nix/store/ygmm8f7q1ry4hi961k9l9xn87107k4xq-python3.9-frozenlist-1.2.0/lib/python3.9/site-packages (from aiohttp<4,>=3->stig==0.12.2a0) (1.2.0)
stig> Requirement already satisfied: charset-normalizer<3.0,>=2.0 in /nix/store/3jszwzh0nc6lczap1ycb6gp0lzlysrmh-python3.9-charset-normalizer-2.0.5/lib/python3.9/site-packages (from aiohttp<4,>=3->stig==0.12.2a0) (2.0.5)
stig> Requirement already satisfied: aiosignal>=1.1.2 in /nix/store/164z6jp8kgdywv8gcrmnks66y0qfnmn2-python3.9-aiosignal-1.2.0/lib/python3.9/site-packages (from aiohttp<4,>=3->stig==0.12.2a0) (1.2.0)
stig> Requirement already satisfied: attrs>=17.3.0 in /nix/store/5hfniic5zwil2sxqya5dhk54fzdydlxb-python3.9-attrs-21.2.0/lib/python3.9/site-packages (from aiohttp<4,>=3->stig==0.12.2a0) (21.2.0)
stig> Requirement already satisfied: yarl<2.0,>=1.0 in /nix/store/sihhin284pwklhz4pb7n69i03s88kil3-python3.9-yarl-1.7.2/lib/python3.9/site-packages (from aiohttp<4,>=3->stig==0.12.2a0) (1.7.2)
stig> Requirement already satisfied: typing-extensions>=3.6.5 in /nix/store/syhkb6w1r8a0nm6lpklhgcz177f568bc-python3.9-typing_extensions-3.10.0.2/lib/python3.9/site-packages (from async-timeout->stig==0.12.2a0) (3.10.0.2)
stig> Requirement already satisfied: idna>=2.0 in /nix/store/f8zxgz6ln970pmr7qrsm2hlglrm098wg-python3.9-idna-3.2/lib/python3.9/site-packages (from yarl<2.0,>=1.0->aiohttp<4,>=3->stig==0.12.2a0) (3.2)
stig> Installing collected packages: stig
stig> Successfully installed stig-0.12.2a0
stig> /build/source
stig> Finished executing pipInstallPhase
stig> post-installation fixup
stig> shrinking RPATHs of ELF executables and libraries in /nix/store/25lj218hzhgc10kyyx7c8qpig5ag96w0-stig-0.12.2a0
stig> strip is /nix/store/da9l6ifizmh883j94gzx5n51h8lrrp00-gcc-wrapper-10.3.0/bin/strip
stig> stripping (with command strip and flags -S) in /nix/store/25lj218hzhgc10kyyx7c8qpig5ag96w0-stig-0.12.2a0/lib  /nix/store/25lj218hzhgc10kyyx7c8qpig5ag96w0-stig-0.12.2a0/bin
stig> patching script interpreter paths in /nix/store/25lj218hzhgc10kyyx7c8qpig5ag96w0-stig-0.12.2a0
stig> checking for references to /build/ in /nix/store/25lj218hzhgc10kyyx7c8qpig5ag96w0-stig-0.12.2a0...
stig> Rewriting #!/nix/store/5bh6rpya1ar6l49vrhx1rg58dsa42906-python3-3.9.6/bin/python3.9 to #!/nix/store/5bh6rpya1ar6l49vrhx1rg58dsa42906-python3-3.9.6
stig> wrapping `/nix/store/25lj218hzhgc10kyyx7c8qpig5ag96w0-stig-0.12.2a0/bin/stig'...
stig> Executing pythonRemoveTestsDir
stig> Finished executing pythonRemoveTestsDir
stig> running install tests
stig> no Makefile or custom installCheckPhase, doing nothing
stig> pythonCatchConflictsPhase
stig> pythonRemoveBinBytecodePhase
stig> pythonImportsCheckPhase
stig> Executing pythonImportsCheckPhase
stig> pytestCheckPhase
stig> Executing pytestCheckPhase
stig> ============================= test session starts ==============================
stig> platform linux -- Python 3.9.6, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
stig> rootdir: /build/source, configfile: pytest.ini
stig> collected 1169 items / 1 deselected / 1168 selected
stig> tests/client_test/base_test.py ........                                  [  0%]
stig> tests/client_test/client_utils_test.py ................................. [  3%]
stig> ...............................................                          [  7%]
stig> tests/client_test/constants_test.py ...                                  [  7%]
stig> tests/client_test/poll_test.py ........                                  [  8%]
stig> tests/client_test/trequestpool_test.py .....                             [  8%]
stig> tests/client_test/ttypes_test.py ........                                [  9%]
stig> tests/client_test/aiotransmission_test/api_freespace_test.py ..          [  9%]
stig> tests/client_test/aiotransmission_test/api_settings_test.py ............ [ 10%]
stig> ............................                                             [ 13%]
stig> tests/client_test/aiotransmission_test/api_status_test.py ..             [ 13%]
stig> tests/client_test/aiotransmission_test/api_torrent_test.py ............. [ 14%]
stig> .......                                                                  [ 15%]
stig> tests/client_test/aiotransmission_test/rpc_test.py ....................  [ 16%]
stig> tests/client_test/aiotransmission_test/torrent_test.py ..........        [ 17%]
stig> tests/client_test/filters_test/file_filter_test.py ............          [ 18%]
stig> tests/client_test/filters_test/filter_specs_test.py ..                   [ 18%]
stig> tests/client_test/filters_test/filters_base_test.py .................... [ 20%]
stig> ............................................                             [ 24%]
stig> tests/client_test/filters_test/peer_filter_test.py ............          [ 25%]
stig> tests/client_test/filters_test/setting_filter_test.py ............       [ 26%]
stig> tests/client_test/filters_test/torrent_filter_test.py .................. [ 27%]
stig> ....................                                                     [ 29%]
stig> tests/client_test/filters_test/tracker_filter_test.py .................. [ 31%]
stig>                                                                          [ 31%]
stig> tests/client_test/sorters_test/peer_sorter_test.py ...........           [ 32%]
stig> tests/client_test/sorters_test/setting_sorter_test.py .....              [ 32%]
stig> tests/client_test/sorters_test/sorters_base_test.py ..............       [ 33%]
stig> tests/client_test/sorters_test/torrent_sorter_test.py .................. [ 35%]
stig> ........                                                                 [ 35%]
stig> tests/client_test/sorters_test/tracker_sorter_test.py .............      [ 37%]
stig> tests/commands_test/cmdbase_test.py ...........                          [ 38%]
stig> tests/commands_test/cmdmanager_test.py ................................. [ 40%]
stig>                                                                          [ 40%]
stig> tests/commands_test/commands_utils_test.py ...                           [ 41%]
stig> tests/commands_test/config_cmds_test.py ................................ [ 43%]
stig> ................                                                         [ 45%]
stig> tests/commands_test/guess_ui_test.py ......                              [ 45%]
stig> tests/commands_test/misc_cmds_test.py .....                              [ 46%]
stig> tests/commands_test/torrent_cmds_test.py ..s............................ [ 48%]
stig> .........................................                                [ 52%]
stig> tests/commands_test/tui_cmds_test.py .....................               [ 54%]
stig> tests/completion_test/candidates_test.py ............................... [ 56%]
stig> ......                                                                   [ 57%]
stig> tests/completion_test/classes_test.py ..F.....................           [ 59%]
stig> tests/completion_test/completion_utils_test.py ..........                [ 60%]
stig> tests/settings_test/rcfile_test.py .....                                 [ 60%]
stig> tests/settings_test/settings_test.py ................................... [ 63%]
stig> ..                                                                       [ 63%]
stig> tests/tui_test/cli_test.py .......                                       [ 64%]
stig> tests/tui_test/completer_test.py ..........................              [ 66%]
stig> tests/tui_test/group_test.py .................                           [ 68%]
stig> tests/tui_test/keymap_test.py .......................................... [ 71%]
stig> .........                                                                [ 72%]
stig> tests/tui_test/scroll_test.py ......................                     [ 74%]
stig> tests/tui_test/tabs_test.py ............................................ [ 78%]
stig>                                                                          [ 78%]
stig> tests/tui_test/theme_test.py ..........                                  [ 78%]
stig> tests/tui_test/urwidpatches_test.py ..                                   [ 79%]
stig> tests/utils_test/cliparser_test.py ..................................... [ 82%]
stig> ........................................................................ [ 88%]
stig> ...............................................                          [ 92%]
stig> tests/utils_test/converter_test.py ..........                            [ 93%]
stig> tests/utils_test/string_test.py ..........                               [ 94%]
stig> tests/utils_test/usertypes_test.py ..................................... [ 97%]
stig> .............................                                            [ 99%]
stig> tests/utils_test/utils_test.py ..                                        [100%]
stig> =================================== FAILURES ===================================
stig> _________ TestCandidates.test_candidates_are_sorted_case_insensitively _________
stig> self = <classes_test.TestCandidates testMethod=test_candidates_are_sorted_case_insensitively>
stig>     def test_candidates_are_sorted_case_insensitively(self):
stig> >       self.assertEqual(tuple(Candidates(('B', 'a'))), ('a', 'B'))
stig> E       AssertionError: Tuples differ: (Candidate('B'), Candidate('a')) != ('a', 'B')
stig> E
stig> E       First differing element 0:
stig> E       Candidate('B')
stig> E       'a'
stig> E
stig> E       - (Candidate('B'), Candidate('a'))
stig> E       + ('a', 'B')
stig> tests/completion_test/classes_test.py:16: AssertionError
stig> =========================== short test summary info ============================
stig> FAILED tests/completion_test/classes_test.py::TestCandidates::test_candidates_are_sorted_case_insensitively
stig> =========== 1 failed, 1166 passed, 1 skipped, 1 deselected in 25.14s ===========
error: builder for '/nix/store/z5lvnfj7np3fs2y4xb4i4z0lwfh6vsrm-stig-0.12.2a0.drv' failed with exit code 1;
       last 10 log lines:
       > E       Candidate('B')
       > E       'a'
       > E
       > E       - (Candidate('B'), Candidate('a'))
       > E       + ('a', 'B')
       >
       > tests/completion_test/classes_test.py:16: AssertionError
       > =========================== short test summary info ============================
       > FAILED tests/completion_test/classes_test.py::TestCandidates::test_candidates_are_sorted_case_insensitively
       > =========== 1 failed, 1166 passed, 1 skipped, 1 deselected in 25.14s ===========
       For full logs, run 'nix log /nix/store/z5lvnfj7np3fs2y4xb4i4z0lwfh6vsrm-stig-0.12.2a0.drv'.
rndusr commented 3 years ago

All tests run through for me with a fresh venv on 3.9.6 and all other Python versions.

ju1m commented 3 years ago

@rndusr, git bisecting Nixpkgs blames a natsort update:

1573e35ba0cb5b85dac35aa827ed9bad4775dc15 is the first bad commit
commit 1573e35ba0cb5b85dac35aa827ed9bad4775dc15
Author: Fabian Affolter <mail@fabian-affolter.ch>
Date:   Tue Nov 9 01:08:07 2021 +0100

    python3Packages.natsort: 7.1.1 -> 8.0.0

 .../development/python-modules/natsort/default.nix | 53 +++++++++++-----------
 1 file changed, 26 insertions(+), 27 deletions(-)
succès de la bissection

Ping @fabaff

rndusr commented 3 years ago

I'm using natsort 8.0.0 and everything works.

natsort 8.0.0 doesn't seem to have any breaking changes: https://pypi.org/project/natsort/#deprecation-schedule

The only issue I found is that stig still supports Python 3.5 but natsort doesn't. I've dropped support for 3.5 in master, maybe that helps?

ju1m commented 3 years ago

@rndusr same python version used in Nixpkgs.

$ nix eval -f . python3.version
"3.9.6"

Turns out natsort was not correctly updated to 8.0.0 in Nixpkgs, but after fixing this the test still fails.

rndusr commented 3 years ago

Can you reproduce this in a normal venv without using anything specific to Nix?

ju1m commented 3 years ago

@rndusr, I cannot reproduce with make clean && make venv && source venv/bin/activate && pytest, but I was able to bisect 1573e35ba0cb5b85dac35aa827ed9bad4775dc15 further down to its addition of PyICU into the propagatedBuildInputs of natsort.

https://pypi.org/project/natsort says:

It is recommended that you install PyICU if you wish to sort in a locale-dependent manner, see https://natsort.readthedocs.io/en/master/locale_issues.html for an explanation why.

I naively tried to reproduce in a venv with this diff, but to no avail. I guess it's not enough to make natsort use PyICU:

diff --git a/setup.py b/setup.py                                                                                               
index 76fdc152..915469af 100644
--- a/setup.py
+++ b/setup.py
@@ -50,6 +50,7 @@ setup(                                                                                                       
         'pyxdg',
         'blinker',
         'natsort',
+        'PyICU',                                                                                                              
     ],
     extras_require = {
         'setproctitle': ['setproctitle'],

FTR, I'm using this stig/shell.nix (nix develop -f shell.nix) to get an environment with python, ICU and gcc, in order to make clean && make venv && source venv/bin/activate && pytest:

{ pkgs ? import /home/julm/src/nix/nixpkgs {} }:
(pkgs.buildFHSUserEnv {
  name = "stig-venv";
  targetPkgs = ps: (with ps; [
    python39
    python39Packages.pip
    python39Packages.virtualenv
    icu.dev
    pkg-config
    pkgs.gcc
  ]);
  runScript = "bash";
}).env
rndusr commented 3 years ago

I don't think this is a locale issue. "B" and "a" are just ASCII characters. They should always be sorted naturally.

Just my opinion. I don't really know anything about natsort and locales.

ju1m commented 3 years ago

@rndusr, I'm no pythoner but could the problem stems from the Candidate() wrapping the characters in one case but not the other?

stig> E       - (Candidate('B'), Candidate('a'))
stig> E       + ('a', 'B')
rndusr commented 3 years ago

If that were the case, I shouldn't have any trouble reproducing the failed tests.

This must be something that is specific to your environment.

The tests run fine for me with PyICU installed, so that can't be it.

I know nothing about packaging, but maybe you can take a look at the natsort package to see if you need to set the locale or something? Just a wild guess.

doronbehar commented 8 months ago

We are experiencing nowadays more errors on NixOS:

============================= test session starts ==============================
platform linux -- Python 3.10.13, pytest-7.4.4, pluggy-1.4.0
rootdir: /build/source
configfile: pytest.ini
collected 1128 items / 1 deselected / 1127 selected                            

tests/client_test/base_test.py ........                                  [  0%]
tests/client_test/client_utils_test.py ................................. [  3%]
...............................................                          [  7%]
tests/client_test/constants_test.py ...                                  [  8%]
tests/client_test/poll_test.py ........                                  [  8%]
tests/client_test/trequestpool_test.py .....                             [  9%]
tests/client_test/ttypes_test.py ........                                [  9%]
tests/client_test/aiotransmission_test/api_freespace_test.py ..          [ 10%]
tests/client_test/aiotransmission_test/api_status_test.py ..             [ 10%]
tests/client_test/aiotransmission_test/api_torrent_test.py ............. [ 11%]
.......                                                                  [ 12%]
tests/client_test/aiotransmission_test/rpc_test.py ...................   [ 13%]
tests/client_test/aiotransmission_test/torrent_test.py ..........        [ 14%]
tests/client_test/filters_test/file_filter_test.py ............          [ 15%]
tests/client_test/filters_test/filter_specs_test.py ..                   [ 15%]
tests/client_test/filters_test/filters_base_test.py .................... [ 17%]
............................................                             [ 21%]
tests/client_test/filters_test/peer_filter_test.py ............          [ 22%]
tests/client_test/filters_test/setting_filter_test.py ............       [ 23%]
tests/client_test/filters_test/torrent_filter_test.py .................. [ 25%]
....................                                                     [ 27%]
tests/client_test/filters_test/tracker_filter_test.py .................. [ 28%]
                                                                         [ 28%]
tests/client_test/sorters_test/peer_sorter_test.py ...........           [ 29%]
tests/client_test/sorters_test/setting_sorter_test.py .....              [ 30%]
tests/client_test/sorters_test/sorters_base_test.py ..............       [ 31%]
tests/client_test/sorters_test/torrent_sorter_test.py .................. [ 32%]
........                                                                 [ 33%]
tests/client_test/sorters_test/tracker_sorter_test.py .............      [ 34%]
tests/commands_test/cmdbase_test.py ...........                          [ 35%]
tests/commands_test/cmdmanager_test.py ................................. [ 38%]
                                                                         [ 38%]
tests/commands_test/commands_utils_test.py ...                           [ 38%]
tests/commands_test/config_cmds_test.py ................................ [ 41%]
................                                                         [ 43%]
tests/commands_test/guess_ui_test.py ......                              [ 43%]
tests/commands_test/misc_cmds_test.py .....                              [ 44%]
tests/commands_test/torrent_cmds_test.py ..s............................ [ 46%]
.........................................                                [ 50%]
tests/commands_test/tui_cmds_test.py .....................               [ 52%]
tests/completion_test/candidates_test.py ............................... [ 55%]
......                                                                   [ 55%]
tests/completion_test/classes_test.py .......................            [ 57%]
tests/completion_test/completion_utils_test.py ..........                [ 58%]
tests/settings_test/rcfile_test.py .....                                 [ 59%]
tests/settings_test/settings_test.py ................................... [ 62%]
..                                                                       [ 62%]
tests/tui_test/cli_test.py .......E                                      [ 62%]
tests/tui_test/completer_test.py ..........................              [ 65%]
tests/tui_test/group_test.py .................                           [ 66%]
tests/tui_test/keymap_test.py .......................................... [ 70%]
.........                                                                [ 71%]
tests/tui_test/scroll_test.py F..FF.........F.FF..F.F                    [ 73%]
tests/tui_test/tabs_test.py ............................................ [ 77%]
                                                                         [ 77%]
tests/tui_test/theme_test.py ..........                                  [ 78%]
tests/tui_test/urwidpatches_test.py ..E                                  [ 78%]
tests/utils_test/cliparser_test.py ..................................... [ 81%]
........................................................................ [ 88%]
...............................................                          [ 92%]
tests/utils_test/converter_test.py ..........                            [ 93%]
tests/utils_test/string_test.py ..........                               [ 93%]
tests/utils_test/usertypes_test.py ..................................... [ 97%]
.............................                                            [ 99%]
tests/utils_test/utils_test.py ..                                        [100%]

==================================== ERRORS ====================================
___________ ERROR at teardown of TestCLIEditWidget.test_no_completer ___________

self = <module 'tui_test.cli_test' from '/build/source/tests/tui_test/cli_test.py'>

    def tearDownModule(self):
        # Remove monkey patches
        from stig.tui import urwidpatches
        urwidpatches.revert_patches()

        import urwid
>       assert not hasattr(urwid.ListBox, 'get_scrollpos')
E       AssertionError

tests/tui_test/_handle_urwidpatches.py:17: AssertionError
------------------------------ Captured log call -------------------------------
Using selector: EpollSelector
Exception in callback _redraw_screen() at /build/source/stig/tui/main.py:85
handle: <Handle _redraw_screen() at /build/source/stig/tui/main.py:85>
Traceback (most recent call last):
  File "/nix/store/9d1gknfymymdfm8fwry11vxvh80q7sj6-python3-3.10.13/lib/python3.10/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/build/source/stig/tui/main.py", line 88, in _redraw_screen
    urwidloop.draw_screen()
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/event_loop/main_loop.py", line 667, in draw_screen
    canvas = self._topmost_widget.render(self.screen_size, focus=True)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 112, in cached_render
    canv = fn(self, size, focus=focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 711, in render
    canv = get_delegate(self).render(size, focus=focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 112, in cached_render
    canv = fn(self, size, focus=focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/pile.py", line 866, in render
    _widths, heights, size_args = self.get_rows_sizes(size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/pile.py", line 778, in get_rows_sizes
    item_rows = self.get_item_rows(size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/pile.py", line 835, in get_item_rows
    rows = w.rows((maxcol,), focus=focus and self.focus == w)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 181, in cached_rows
    return fn(self, size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/columns.py", line 1186, in rows
    _, heights, _ = self.get_column_sizes(size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/columns.py", line 927, in get_column_sizes
    widths = tuple(self.column_widths(size=size, focus=focus))
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/columns.py", line 780, in column_widths
    if w_sizing & frozenset((Sizing.FIXED, Sizing.FLOW)):
TypeError: unsupported operand type(s) for &: 'list' and 'frozenset'
_________ ERROR at teardown of TestListBox_scrolling_API.test_rows_max _________

self = <module 'tui_test.urwidpatches_test' from '/build/source/tests/tui_test/urwidpatches_test.py'>

    def tearDownModule(self):
        # Remove monkey patches
        from stig.tui import urwidpatches
        urwidpatches.revert_patches()

        import urwid
>       assert not hasattr(urwid.ListBox, 'get_scrollpos')
E       AssertionError

tests/tui_test/_handle_urwidpatches.py:17: AssertionError
=================================== FAILURES ===================================
_______________________ TestScrollable.test_empty_widget _______________________

self = <tui_test.scroll_test.TestScrollable testMethod=test_empty_widget>

    def test_empty_widget(self):
        for w in (Scrollable(urwid.Text('')),
                  Scrollable(urwid.Pile([]))):
>           self.check(w, size=(5, 10), text=(' ' * 5,) * 10)

tests/tui_test/scroll_test.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:46: in check
    content = tuple(get_canvas_text(row) for row in canv.content())
tests/tui_test/scroll_test.py:46: in <genexpr>
    content = tuple(get_canvas_text(row) for row in canv.content())
/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/canvas.py:719: in content
    yield shard_body_row(sbody)
/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/canvas.py:934: in shard_body_row
    row.extend(next(content_iter))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <TextCanvas finalized=True cols=0 rows=1 at 0x7FFFF28DC430>
trim_left = 0, trim_top = 0, cols = 0, rows = 1, attr = None

    def content(
        self,
        trim_left: int = 0,
        trim_top: int = 0,
        cols: int | None = 0,
        rows: int | None = 0,
        attr=None,
    ) -> Iterable[tuple[object, Literal["0", "U"] | None, bytes]]:
        """
        Return the canvas content as a list of rows where each row
        is a list of (attr, cs, text) tuples.

        trim_left, trim_top, cols, rows may be set by
        CompositeCanvas when rendering a partially obscured
        canvas.
        """
        maxcol, maxrow = self.cols(), self.rows()
        if not cols:
            cols = maxcol - trim_left
        if not rows:
            rows = maxrow - trim_top

        if not ((0 <= trim_left < maxcol) and (cols > 0 and trim_left + cols <= maxcol)):
>           raise ValueError(trim_left)
E           ValueError: 0

/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/canvas.py:496: ValueError
_______________________ TestScrollable.test_mouse_event ________________________

self = <tui_test.scroll_test.TestScrollable testMethod=test_mouse_event>

    def test_mouse_event(self):
        w = Scrollable(
            urwid.Pile([urwid.Text('t1'),
                        urwid.Text('t2'),
                        urwid.Edit('', 'eXXX'),
                        urwid.Text('t3'),
                        urwid.Edit('', 'eYYY'),
                        urwid.Text('t4'),
                        urwid.Text('t5')])
        )
        size = (10, 2)
        self.check(w, size, cursor_pos=None, text=('t1'.ljust(size[0]),
                                                   't2'.ljust(size[0])))

        size = (10, 5)
>       self.check(w, size, cursor_pos=(4, 2), text=('t1'.ljust(size[0]),
                                                     't2'.ljust(size[0]),
                                                     'eXXX'.ljust(size[0]),
                                                     't3'.ljust(size[0]),
                                                     'eYYY'.ljust(size[0])))

tests/tui_test/scroll_test.py:267: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:48: in check
    self.assertEqual(content, content_exp)
E   AssertionError: Tuples differ: ('t1        ', 't2        ', 'eX        ', 'X         ', 't3        ') != ('t1        ', 't2        ', 'eXXX      ', 't3        ', 'eYYY      ')
E   
E   First differing element 2:
E   'eX        '
E   'eXXX      '
E   
E   - ('t1        ', 't2        ', 'eX        ', 'X         ', 't3        ')
E   ?                                 ^^        --------------
E   
E   + ('t1        ', 't2        ', 'eXXX      ', 't3        ', 'eYYY      ')
E   ?                                 ^^                    ++++++++++++++
___________________ TestScrollable.test_moving_focus_up_down ___________________

self = <tui_test.scroll_test.TestScrollable testMethod=test_moving_focus_up_down>

    def test_moving_focus_up_down(self):
        w = Scrollable(
            urwid.Pile([urwid.Text('t1'),
                        urwid.Text('t2'),
                        urwid.Edit('', 'e3'),
                        urwid.Text('t4'),
                        urwid.Text('t5'),
                        urwid.Edit('', 'e6'),
                        urwid.Text('t7'),
                        urwid.Text('t8')])
        )
        size = (10, 2)
        self.check(w, size, text=('t1'.ljust(size[0]),
                                  't2'.ljust(size[0])))
        w.keypress(size, 'down')
>       self.check(w, size, text=('t2'.ljust(size[0]),
                                  'e3'.ljust(size[0])))

tests/tui_test/scroll_test.py:240: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:48: in check
    self.assertEqual(content, content_exp)
E   AssertionError: Tuples differ: ('t2        ', '3         ') != ('t2        ', 'e3        ')
E   
E   First differing element 1:
E   '3         '
E   'e3        '
E   
E   - ('t2        ', '3         ')
E   ?                  -
E   
E   + ('t2        ', 'e3        ')
E   ?                 +
_____ TestScrollable.test_widget_with_cursor_gets_keypress_only_if_visible _____

self = <tui_test.scroll_test.TestScrollable testMethod=test_widget_with_cursor_gets_keypress_only_if_visible>

    def test_widget_with_cursor_gets_keypress_only_if_visible(self):
        w = Scrollable(
            urwid.Pile([urwid.Text('t1'),
                        urwid.Text('t2'),
                        urwid.Edit('', 'e3')])
        )
        size = (5, 2)

        def press_keys():
            for key in ('backspace', 'backspace', 'f', 'o', 'o'):
                w.keypress(size, key)

        self.check(w, size, text=('t1'.ljust(size[0]),
                                  't2'.ljust(size[0])))
        press_keys()
        self.check(w, size, text=('t1'.ljust(size[0]),
                                  't2'.ljust(size[0])))

        w.set_scrollpos(1)
>       self.check(w, size, text=('t2'.ljust(size[0]),
                                  'e3'.ljust(size[0])))

tests/tui_test/scroll_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:48: in check
    self.assertEqual(content, content_exp)
E   AssertionError: Tuples differ: ('t2   ', '3    ') != ('t2   ', 'e3   ')
E   
E   First differing element 1:
E   '3    '
E   'e3   '
E   
E   - ('t2   ', '3    ')
E   ?             -
E   
E   + ('t2   ', 'e3   ')
E   ?            +
________________ TestScrollBarWithScrollable.test_empty_widget _________________

self = <tui_test.scroll_test.TestScrollBarWithScrollable testMethod=test_empty_widget>

    def test_empty_widget(self):
        for w in (ScrollBar(Scrollable(urwid.Text(''))),
                  ScrollBar(Scrollable(urwid.Pile([])))):
>           self.check(w, size=(5, 10), text=(' ' * 5,) * 10)

tests/tui_test/scroll_test.py:321: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:310: in check
    content = tuple(get_canvas_text(row) for row in canv.content())
tests/tui_test/scroll_test.py:310: in <genexpr>
    content = tuple(get_canvas_text(row) for row in canv.content())
/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/canvas.py:719: in content
    yield shard_body_row(sbody)
/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/canvas.py:934: in shard_body_row
    row.extend(next(content_iter))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <TextCanvas finalized=True cols=0 rows=1 at 0x7FFFF1FC8130>
trim_left = 0, trim_top = 0, cols = 0, rows = 1, attr = None

    def content(
        self,
        trim_left: int = 0,
        trim_top: int = 0,
        cols: int | None = 0,
        rows: int | None = 0,
        attr=None,
    ) -> Iterable[tuple[object, Literal["0", "U"] | None, bytes]]:
        """
        Return the canvas content as a list of rows where each row
        is a list of (attr, cs, text) tuples.

        trim_left, trim_top, cols, rows may be set by
        CompositeCanvas when rendering a partially obscured
        canvas.
        """
        maxcol, maxrow = self.cols(), self.rows()
        if not cols:
            cols = maxcol - trim_left
        if not rows:
            rows = maxrow - trim_top

        if not ((0 <= trim_left < maxcol) and (cols > 0 and trim_left + cols <= maxcol)):
>           raise ValueError(trim_left)
E           ValueError: 0

/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/canvas.py:496: ValueError
_________________ TestScrollBarWithScrollable.test_mouse_event _________________

self = <tui_test.scroll_test.TestScrollBarWithScrollable testMethod=test_mouse_event>

    def test_mouse_event(self):
        scrl = Scrollable(
            urwid.Pile([urwid.Text('t1'),
                        urwid.Text('t2'),
                        urwid.Edit('', 'eXXX'),
                        urwid.Text('t3'),
                        urwid.Edit('', 'eYYY'),
                        urwid.Text('t4'),
                        urwid.Text('t5')])
        )
        sb = ScrollBar(scrl, thumb_char='#', trough_char='|')

        size = (10, 5)
>       self.check(sb, size, cursor_pos=(4, 2), text=('t1'.ljust(size[0] - 1)   + '#',
                                                      't2'.ljust(size[0] - 1)   + '#',
                                                      'eXXX'.ljust(size[0] - 1) + '#',
                                                      't3'.ljust(size[0] - 1)   + '#',
                                                      'eYYY'.ljust(size[0] - 1) + '|'))

tests/tui_test/scroll_test.py:405: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:312: in check
    self.assertEqual(content, content_exp)
E   AssertionError: Tuples differ: ('t1       #', 't2       #', 'eX       #', 'X        |', 't3       |') != ('t1       #', 't2       #', 'eXXX     #', 't3       #', 'eYYY     |')
E   
E   First differing element 2:
E   'eX       #'
E   'eXXX     #'
E   
E   - ('t1       #', 't2       #', 'eX       #', 'X        |', 't3       |')
E   ?                                 ^^         --------------
E   
E   + ('t1       #', 't2       #', 'eXXX     #', 't3       #', 'eYYY     |')
E   ?                                 ^^                   ++++++++++++++
_________________ TestScrollBarWithScrollable.test_shards_bug __________________

self = <tui_test.scroll_test.TestScrollBarWithScrollable testMethod=test_shards_bug>

    def test_shards_bug(self):
        scrl = Scrollable(
            urwid.Pile([urwid.Columns([urwid.Text("text")] * 3)] * 3)
        )
        sb = ScrollBar(scrl, thumb_char='#', trough_char='|', width=3)
        area = urwid.Overlay(urwid.SolidFill("O"), sb, "center", 4, "middle", 5)

>       self.check(area, (10, 5), cursor_pos=(), text=(
            'tetOOOO###',
            'xttOOOO###',
            'tetOOOO###',
            'xttOOOO###',
            'tetOOOO|||',
        ))

tests/tui_test/scroll_test.py:440: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:312: in check
    self.assertEqual(content, content_exp)
E   AssertionError: Tuples differ: ('texOOOOtte', 'texOOOOtte', 'texOOOOtte', '   OOOO   ', '   OOOO   ') != ('tetOOOO###', 'xttOOOO###', 'tetOOOO###', 'xttOOOO###', 'tetOOOO|||')
E   
E   First differing element 0:
E   'texOOOOtte'
E   'tetOOOO###'
E   
E   - ('texOOOOtte', 'texOOOOtte', 'texOOOOtte', '   OOOO   ', '   OOOO   ')
E   + ('tetOOOO###', 'xttOOOO###', 'tetOOOO###', 'xttOOOO###', 'tetOOOO|||')
________________ TestScrollBarWithScrollable.test_wrapping_bug _________________

self = <tui_test.scroll_test.TestScrollBarWithScrollable testMethod=test_wrapping_bug>

    def test_wrapping_bug(self):
        scrl = Scrollable(
            urwid.Pile([urwid.Columns([urwid.Text("long text")] * 2)] * 2)
        )
        sb = ScrollBar(scrl, thumb_char='#', trough_char='|', width=3)
        widget = urwid.Columns([urwid.Pile([urwid.LineBox(sb)])] * 2)

>       self.check(widget, (9, 6), cursor_pos=(), text=(
            '┌───┐┌──┐',
            '│###││##│',
            '│###││##│',
            '│###││##│',
            '│###││##│',
            '└───┘└──┘',
        ))

tests/tui_test/scroll_test.py:456: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/tui_test/scroll_test.py:312: in check
    self.assertEqual(content, content_exp)
E   AssertionError: Tuples differ: ('┌───┐┌──┐', '│lon││lo│', '│lon││lo│', '│   ││  │', '│   ││  │', '└───┘└──┘') != ('┌───┐┌──┐', '│###││##│', '│###││##│', '│###││##│', '│###││##│', '└───┘└──┘')
E   
E   First differing element 1:
E   '│lon││lo│'
E   '│###││##│'
E   
E   - ('┌───┐┌──┐', '│lon││lo│', '│lon││lo│', '│   ││  │', '│   ││  │', '└───┘└──┘')
E   + ('┌───┐┌──┐', '│###││##│', '│###││##│', '│###││##│', '│###││##│', '└───┘└──┘')
=============================== warnings summary ===============================
../../nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/grid_flow.py:81: 1 warning
tests/tui_test/tabs_test.py: 43 warnings
  /nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/grid_flow.py:81: GridFlowWarning: Size is smaller than cell width (-1 < 20)
    super().__init__(self.generate_display_widget((self._cache_maxcol,)))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/tui_test/scroll_test.py::TestScrollable::test_empty_widget - ValueError: 0
FAILED tests/tui_test/scroll_test.py::TestScrollable::test_mouse_event - AssertionError: Tuples differ: ('t1        ', 't2        ', 'eX        ', '...
FAILED tests/tui_test/scroll_test.py::TestScrollable::test_moving_focus_up_down - AssertionError: Tuples differ: ('t2        ', '3         ') != ('t2        ...
FAILED tests/tui_test/scroll_test.py::TestScrollable::test_widget_with_cursor_gets_keypress_only_if_visible - AssertionError: Tuples differ: ('t2   ', '3    ') != ('t2   ', 'e3   ')
FAILED tests/tui_test/scroll_test.py::TestScrollBarWithScrollable::test_empty_widget - ValueError: 0
FAILED tests/tui_test/scroll_test.py::TestScrollBarWithScrollable::test_mouse_event - AssertionError: Tuples differ: ('t1       #', 't2       #', 'eX       #', '...
FAILED tests/tui_test/scroll_test.py::TestScrollBarWithScrollable::test_shards_bug - AssertionError: Tuples differ: ('texOOOOtte', 'texOOOOtte', 'texOOOOtte', '...
FAILED tests/tui_test/scroll_test.py::TestScrollBarWithScrollable::test_wrapping_bug - AssertionError: Tuples differ: ('┌───┐┌──┐', '│lon││lo│', '│lon││lo│', '│  ...
ERROR tests/tui_test/cli_test.py::TestCLIEditWidget::test_no_completer - AssertionError
ERROR tests/tui_test/urwidpatches_test.py::TestListBox_scrolling_API::test_rows_max - AssertionError
= 8 failed, 1118 passed, 1 skipped, 1 deselected, 44 warnings, 2 errors in 7.58s =
rndusr commented 8 months ago

I'm surprised you got that many tests to pass. I haven't tried to run them for years. asyntest has been deprecated for a long time now.

I'm sorry if this complicates your work flow. Maybe simply not running the tests is an option? stig isn't going to get any new features and any bug fixes will not get new tests.

doronbehar commented 8 months ago

Without running the tests, I got the following error on startup:

/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/grid_flow.py:81: GridFlowWarning: Size is smaller than cell width (-1 < 20)
  super().__init__(self.generate_display_widget((self._cache_maxcol,)))
Traceback (most recent call last):
  File "/nix/store/hvb5n6lj1glvp9vnnlfq551q0q1mi5ag-stig-0.12.8a0/bin/.stig-wrapped", line 9, in <module>
    sys.exit(run())
  File "/nix/store/hvb5n6lj1glvp9vnnlfq551q0q1mi5ag-stig-0.12.8a0/lib/python3.10/site-packages/stig/__init__.py", line 25, in run
    main.run()
  File "/nix/store/hvb5n6lj1glvp9vnnlfq551q0q1mi5ag-stig-0.12.8a0/lib/python3.10/site-packages/stig/main.py", line 102, in run
    if not tui.run(run_commands):
  File "/nix/store/hvb5n6lj1glvp9vnnlfq551q0q1mi5ag-stig-0.12.8a0/lib/python3.10/site-packages/stig/tui/main.py", line 61, in run
    tuiobjects.urwidloop.run()
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/event_loop/main_loop.py", line 337, in run
    self._run()
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/event_loop/main_loop.py", line 439, in _run
    self.event_loop.run()
  File "/nix/store/hvb5n6lj1glvp9vnnlfq551q0q1mi5ag-stig-0.12.8a0/lib/python3.10/site-packages/stig/tui/urwidpatches.py", line 194, in run
    raise self._exc_info
  File "/nix/store/9d1gknfymymdfm8fwry11vxvh80q7sj6-python3-3.10.13/lib/python3.10/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/event_loop/asyncio_loop.py", line 104, in wrapper
    return callback(*args, **kwargs)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/event_loop/main_loop.py", line 650, in entering_idle
    self.draw_screen()
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/event_loop/main_loop.py", line 667, in draw_screen
    canvas = self._topmost_widget.render(self.screen_size, focus=True)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 112, in cached_render
    canv = fn(self, size, focus=focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 711, in render
    canv = get_delegate(self).render(size, focus=focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 112, in cached_render
    canv = fn(self, size, focus=focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/pile.py", line 866, in render
    _widths, heights, size_args = self.get_rows_sizes(size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/pile.py", line 778, in get_rows_sizes
    item_rows = self.get_item_rows(size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/pile.py", line 835, in get_item_rows
    rows = w.rows((maxcol,), focus=focus and self.focus == w)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/widget.py", line 181, in cached_rows
    return fn(self, size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/columns.py", line 1186, in rows
    _, heights, _ = self.get_column_sizes(size, focus)
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/columns.py", line 927, in get_column_sizes
    widths = tuple(self.column_widths(size=size, focus=focus))
  File "/nix/store/gm7ws9n7w3wacipxrwac8f2sjfrwgj4r-python3.10-urwid-2.6.8/lib/python3.10/site-packages/urwid/widget/columns.py", line 780, in column_widths
    if w_sizing & frozenset((Sizing.FIXED, Sizing.FLOW)):
TypeError: unsupported operand type(s) for &: 'list' and 'frozenset'
rndusr commented 8 months ago

What's the urwid version you are using?

doronbehar commented 8 months ago
rndusr commented 8 months ago

You need urwid 2.2.*. This is specified in setup.py.