stig
stig copied to clipboard
FAILED tests/completion_test/classes_test.py::TestCandidates::test_candidates_are_sorted_case_insensitively
$ 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'.
All tests run through for me with a fresh venv on 3.9.6 and all other Python versions.
@rndusr, git bisect
ing Nixpkgs blames a natsort
update:
1573e35ba0cb5b85dac35aa827ed9bad4775dc15 is the first bad commit
commit 1573e35ba0cb5b85dac35aa827ed9bad4775dc15
Author: Fabian Affolter <[email protected]>
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
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?
@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.
Can you reproduce this in a normal venv without using anything specific to Nix?
@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
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.
@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')
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.
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 =
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.
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'
What's the urwid version you are using?
-
urwid
, version 2.6.8 -
urwidtrees
, version 1.0.3
You need urwid 2.2.*. This is specified in setup.py.