cmd2 2.5.4__tar.gz → 2.5.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cmd2-2.5.4 → cmd2-2.5.6}/CHANGELOG.md +10 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/PKG-INFO +1 -1
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/cmd2.py +3 -3
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/command_definition.py +6 -3
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/decorators.py +20 -55
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/utils.py +5 -9
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2.egg-info/PKG-INFO +1 -1
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/conf.py +2 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/.readthedocs.yaml +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/LICENSE +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/MANIFEST.in +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/Pipfile +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/README.md +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/ansi.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/argparse_completer.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/argparse_custom.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/clipboard.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/constants.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/exceptions.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/history.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/parsing.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/plugin.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/py.typed +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/py_bridge.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/rl_utils.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/table_creator.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2/transcript.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2.egg-info/SOURCES.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2.egg-info/dependency_links.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2.egg-info/requires.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2.egg-info/top_level.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/cmd2.png +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/Makefile +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/ansi.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/argparse_completer.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/argparse_custom.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/cmd.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/command_definition.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/constants.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/decorators.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/exceptions.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/history.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/parsing.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/plugin.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/plugin_external_test.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/py_bridge.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/table_creator.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/api/utils.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/doc_conventions.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/examples/alternate_event_loops.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/examples/first_app.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/examples/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/argument_processing.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/builtin_commands.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/clipboard.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/commands.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/completion.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/disable_commands.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/embedded_python_shells.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/generating_output.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/help.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/history.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/hooks.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/initialization.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/misc.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/modular_commands.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/multiline_commands.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/os.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/packaging.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/plugins.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/prompt.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/redirection.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/scripting.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/settings.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/shortcuts_aliases_macros.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/startup_commands.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/table_creation.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/features/transcripts.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/make.bat +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/migrating/incompatibilities.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/migrating/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/migrating/minimum.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/migrating/next_steps.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/migrating/summary.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/migrating/why.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/overview/alternatives.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/overview/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/overview/installation.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/overview/integrating.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/overview/resources.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/overview/summary.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/plugins/external_test.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/plugins/index.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/requirements.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/docs/testing.rst +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/.cmd2rc +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/alias_startup.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/arg_decorators.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/arg_print.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/argparse_completion.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/async_printing.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/basic.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/basic_completion.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/cmd_as_argument.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/colors.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/custom_parser.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/decorator_example.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/default_categories.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/dynamic_commands.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/environment.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/event_loops.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/example.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/exit_code.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/first_app.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/hello_cmd2.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/help_categories.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/hooks.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/initialization.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/migrating.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands/commandset_basic.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands/commandset_complex.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands/commandset_custominit.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands_basic.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands_dynamic.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_commands_main.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/modular_subcommands.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/override_parser.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/paged_output.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/persistent_history.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/pirate.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/python_scripting.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/read_input.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/remove_builtin_commands.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/remove_settable.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/arg_printer.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/conditional.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/nested.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/quit.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/save_help_text.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/script.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/scripts/script.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/subcommands.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/table_creation.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/transcripts/exampleSession.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/transcripts/pirate.transcript +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/transcripts/quit.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/transcripts/transcript_regex.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/examples/unicode_commands.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/README.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/CHANGELOG.md +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/README.md +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/build-pyenvs.sh +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/cmd2_ext_test/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/cmd2_ext_test/cmd2_ext_test.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/cmd2_ext_test/py.typed +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/cmd2_ext_test/pylintrc +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/examples/example.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/noxfile.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/pyproject.toml +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/setup.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/tasks.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/tests/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/tests/pylintrc +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/ext_test/tests/test_ext_test.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/tasks.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/CHANGELOG.md +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/LICENSE +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/README.md +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/build-pyenvs.sh +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/cmd2_myplugin/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/cmd2_myplugin/myplugin.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/cmd2_myplugin/pylintrc +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/examples/example.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/noxfile.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/setup.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/tasks.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/tests/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/tests/pylintrc +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/plugins/template/tests/test_myplugin.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/pyproject.toml +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/readme_files/shout_out.csv +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/readme_files/shoutout.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/setup.cfg +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tasks.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/.cmd2rc +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/conftest.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/echo.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/environment.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/help.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/py_locals.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/pyscript_dir.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/raises_exception.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/recursive.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/self_in_py.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/stdout_capture.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/pyscript/stop.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/relative_multiple.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/script.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/script.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/binary.bin +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/empty.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/help.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/nested.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/one_down.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/postcmds.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/precmds.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/scripts/utf8.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_ansi.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_argparse.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_argparse_completer.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_argparse_custom.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_cmd2.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_completion.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_history.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_parsing.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_plugin.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_run_pyscript.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_table_creator.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_transcript.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_utils.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/test_utils_defining_class.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/bol_eol.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/characterclass.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/dotstar.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/extension_notation.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/failure.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/from_cmdloop.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/multiline_no_regex.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/multiline_regex.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/no_output.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/no_output_last.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/regex_set.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/singleslash.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/slashes_escaped.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/slashslash.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/spaces.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests/transcripts/word_boundaries.txt +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests_isolated/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests_isolated/test_commandset/__init__.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests_isolated/test_commandset/conftest.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests_isolated/test_commandset/test_argparse_subcommands.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests_isolated/test_commandset/test_categories.py +0 -0
- {cmd2-2.5.4 → cmd2-2.5.6}/tests_isolated/test_commandset/test_commandset.py +0 -0
@@ -1,3 +1,13 @@
|
|
1
|
+
## 2.5.6 (November 14, 2024)
|
2
|
+
* Bug Fixes
|
3
|
+
* Fixed type hint for `with_default_category` decorator which caused type checkers to mistype
|
4
|
+
a subclass of `CommandSet` as a plain `CommandSet`.
|
5
|
+
|
6
|
+
## 2.5.5 (November 13, 2024)
|
7
|
+
* Bug Fixes
|
8
|
+
* Fixed type hints for passing a class method to `with_argparser` and `as_subcommand_to`.
|
9
|
+
* Fixed issue where `set` command was not always printing a settable's current value.
|
10
|
+
|
1
11
|
## 2.5.4 (November 6, 2024)
|
2
12
|
* Bug Fixes
|
3
13
|
* Fixed `ZeroDivisionError` in `async_alert()` when `shutil.get_terminal_size().columns` is 0.
|
@@ -3902,7 +3902,7 @@ class Cmd(cmd.Cmd):
|
|
3902
3902
|
|
3903
3903
|
def columnize(self, str_list: Optional[List[str]], display_width: int = 80) -> None:
|
3904
3904
|
"""Display a list of single-line strings as a compact set of columns.
|
3905
|
-
Override of cmd's
|
3905
|
+
Override of cmd's columnize() to handle strings with ANSI style sequences and wide characters
|
3906
3906
|
|
3907
3907
|
Each column is only as wide as necessary.
|
3908
3908
|
Columns are separated by two spaces (one was not legible enough).
|
@@ -4226,11 +4226,11 @@ class Cmd(cmd.Cmd):
|
|
4226
4226
|
# Try to update the settable's value
|
4227
4227
|
try:
|
4228
4228
|
orig_value = settable.get_value()
|
4229
|
-
|
4229
|
+
settable.set_value(utils.strip_quotes(args.value))
|
4230
4230
|
except Exception as ex:
|
4231
4231
|
self.perror(f"Error setting {args.param}: {ex}")
|
4232
4232
|
else:
|
4233
|
-
self.poutput(f"{args.param} - was: {orig_value!r}\nnow: {
|
4233
|
+
self.poutput(f"{args.param} - was: {orig_value!r}\nnow: {settable.get_value()!r}")
|
4234
4234
|
self.last_result = True
|
4235
4235
|
return
|
4236
4236
|
|
@@ -10,6 +10,7 @@ from typing import (
|
|
10
10
|
Mapping,
|
11
11
|
Optional,
|
12
12
|
Type,
|
13
|
+
TypeVar,
|
13
14
|
)
|
14
15
|
|
15
16
|
from .constants import (
|
@@ -30,8 +31,10 @@ if TYPE_CHECKING: # pragma: no cover
|
|
30
31
|
#: Further refinements are needed to define the input parameters
|
31
32
|
CommandFunc = Callable[..., Optional[bool]]
|
32
33
|
|
34
|
+
CommandSetType = TypeVar('CommandSetType', bound=Type['CommandSet'])
|
33
35
|
|
34
|
-
|
36
|
+
|
37
|
+
def with_default_category(category: str, *, heritable: bool = True) -> Callable[[CommandSetType], CommandSetType]:
|
35
38
|
"""
|
36
39
|
Decorator that applies a category to all ``do_*`` command methods in a class that do not already
|
37
40
|
have a category specified.
|
@@ -42,7 +45,7 @@ def with_default_category(category: str, *, heritable: bool = True) -> Callable[
|
|
42
45
|
override the default category.
|
43
46
|
|
44
47
|
If `heritable` is set to False, then only the commands declared locally to this CommandSet will be placed in the
|
45
|
-
specified category. Dynamically created commands
|
48
|
+
specified category. Dynamically created commands and commands declared in sub-classes will not receive this
|
46
49
|
category.
|
47
50
|
|
48
51
|
:param category: category to put all uncategorized commands in
|
@@ -50,7 +53,7 @@ def with_default_category(category: str, *, heritable: bool = True) -> Callable[
|
|
50
53
|
:return: decorator function
|
51
54
|
"""
|
52
55
|
|
53
|
-
def decorate_class(cls:
|
56
|
+
def decorate_class(cls: CommandSetType) -> CommandSetType:
|
54
57
|
if heritable:
|
55
58
|
setattr(cls, CLASS_ATTR_DEFAULT_HELP_CATEGORY, category)
|
56
59
|
|
@@ -11,9 +11,9 @@ from typing import (
|
|
11
11
|
Optional,
|
12
12
|
Sequence,
|
13
13
|
Tuple,
|
14
|
+
Type,
|
14
15
|
TypeVar,
|
15
16
|
Union,
|
16
|
-
overload,
|
17
17
|
)
|
18
18
|
|
19
19
|
from . import (
|
@@ -65,19 +65,18 @@ def with_category(category: str) -> Callable[[CommandFunc], CommandFunc]:
|
|
65
65
|
return cat_decorator
|
66
66
|
|
67
67
|
|
68
|
-
##########################
|
69
|
-
# The _parse_positionals and _arg_swap functions allow for additional positional args to be preserved
|
70
|
-
# in cmd2 command functions/callables. As long as the 2-ple of arguments we expect to be there can be
|
71
|
-
# found we can swap out the statement with each decorator's specific parameters
|
72
|
-
##########################
|
73
|
-
|
74
|
-
|
75
68
|
CommandParent = TypeVar('CommandParent', bound=Union['cmd2.Cmd', CommandSet])
|
69
|
+
CommandParentType = TypeVar('CommandParentType', bound=Union[Type['cmd2.Cmd'], Type[CommandSet]])
|
76
70
|
|
77
71
|
|
78
72
|
RawCommandFuncOptionalBoolReturn = Callable[[CommandParent, Union[Statement, str]], Optional[bool]]
|
79
73
|
|
80
74
|
|
75
|
+
##########################
|
76
|
+
# The _parse_positionals and _arg_swap functions allow for additional positional args to be preserved
|
77
|
+
# in cmd2 command functions/callables. As long as the 2-ple of arguments we expect to be there can be
|
78
|
+
# found we can swap out the statement with each decorator's specific parameters
|
79
|
+
##########################
|
81
80
|
def _parse_positionals(args: Tuple[Any, ...]) -> Tuple['cmd2.Cmd', Union[Statement, str]]:
|
82
81
|
"""
|
83
82
|
Helper function for cmd2 decorators to inspect the positional arguments until the cmd2.Cmd argument is found
|
@@ -265,28 +264,12 @@ ArgparseCommandFunc = Union[
|
|
265
264
|
]
|
266
265
|
|
267
266
|
|
268
|
-
@overload
|
269
|
-
def with_argparser(
|
270
|
-
parser: argparse.ArgumentParser,
|
271
|
-
*,
|
272
|
-
ns_provider: Optional[Callable[..., argparse.Namespace]] = None,
|
273
|
-
preserve_quotes: bool = False,
|
274
|
-
with_unknown_args: bool = False,
|
275
|
-
) -> Callable[[ArgparseCommandFunc[CommandParent]], RawCommandFuncOptionalBoolReturn[CommandParent]]: ... # pragma: no cover
|
276
|
-
|
277
|
-
|
278
|
-
@overload
|
279
|
-
def with_argparser(
|
280
|
-
parser: Callable[[], argparse.ArgumentParser],
|
281
|
-
*,
|
282
|
-
ns_provider: Optional[Callable[..., argparse.Namespace]] = None,
|
283
|
-
preserve_quotes: bool = False,
|
284
|
-
with_unknown_args: bool = False,
|
285
|
-
) -> Callable[[ArgparseCommandFunc[CommandParent]], RawCommandFuncOptionalBoolReturn[CommandParent]]: ... # pragma: no cover
|
286
|
-
|
287
|
-
|
288
267
|
def with_argparser(
|
289
|
-
parser: Union[
|
268
|
+
parser: Union[
|
269
|
+
argparse.ArgumentParser, # existing parser
|
270
|
+
Callable[[], argparse.ArgumentParser], # function or staticmethod
|
271
|
+
Callable[[CommandParentType], argparse.ArgumentParser], # Cmd or CommandSet classmethod
|
272
|
+
],
|
290
273
|
*,
|
291
274
|
ns_provider: Optional[Callable[..., argparse.Namespace]] = None,
|
292
275
|
preserve_quotes: bool = False,
|
@@ -413,32 +396,14 @@ def with_argparser(
|
|
413
396
|
return arg_decorator
|
414
397
|
|
415
398
|
|
416
|
-
@overload
|
417
|
-
def as_subcommand_to(
|
418
|
-
command: str,
|
419
|
-
subcommand: str,
|
420
|
-
parser: argparse.ArgumentParser,
|
421
|
-
*,
|
422
|
-
help: Optional[str] = None,
|
423
|
-
aliases: Optional[List[str]] = None,
|
424
|
-
) -> Callable[[ArgparseCommandFunc[CommandParent]], ArgparseCommandFunc[CommandParent]]: ... # pragma: no cover
|
425
|
-
|
426
|
-
|
427
|
-
@overload
|
428
|
-
def as_subcommand_to(
|
429
|
-
command: str,
|
430
|
-
subcommand: str,
|
431
|
-
parser: Callable[[], argparse.ArgumentParser],
|
432
|
-
*,
|
433
|
-
help: Optional[str] = None,
|
434
|
-
aliases: Optional[List[str]] = None,
|
435
|
-
) -> Callable[[ArgparseCommandFunc[CommandParent]], ArgparseCommandFunc[CommandParent]]: ... # pragma: no cover
|
436
|
-
|
437
|
-
|
438
399
|
def as_subcommand_to(
|
439
400
|
command: str,
|
440
401
|
subcommand: str,
|
441
|
-
parser: Union[
|
402
|
+
parser: Union[
|
403
|
+
argparse.ArgumentParser, # existing parser
|
404
|
+
Callable[[], argparse.ArgumentParser], # function or staticmethod
|
405
|
+
Callable[[CommandParentType], argparse.ArgumentParser], # Cmd or CommandSet classmethod
|
406
|
+
],
|
442
407
|
*,
|
443
408
|
help: Optional[str] = None,
|
444
409
|
aliases: Optional[List[str]] = None,
|
@@ -450,9 +415,9 @@ def as_subcommand_to(
|
|
450
415
|
:param subcommand: Subcommand name
|
451
416
|
:param parser: argparse Parser for this subcommand
|
452
417
|
:param help: Help message for this subcommand which displays in the list of subcommands of the command we are adding to.
|
453
|
-
This is passed as the help argument to
|
418
|
+
This is passed as the help argument to subparsers.add_parser().
|
454
419
|
:param aliases: Alternative names for this subcommand. This is passed as the alias argument to
|
455
|
-
|
420
|
+
subparsers.add_parser().
|
456
421
|
:return: Wrapper function that can receive an argparse.Namespace
|
457
422
|
"""
|
458
423
|
|
@@ -462,7 +427,7 @@ def as_subcommand_to(
|
|
462
427
|
setattr(func, constants.CMD_ATTR_ARGPARSER, parser)
|
463
428
|
setattr(func, constants.SUBCMD_ATTR_NAME, subcommand)
|
464
429
|
|
465
|
-
# Keyword arguments for
|
430
|
+
# Keyword arguments for subparsers.add_parser()
|
466
431
|
add_parser_kwargs: Dict[str, Any] = dict()
|
467
432
|
if help is not None:
|
468
433
|
add_parser_kwargs['help'] = help
|
@@ -178,17 +178,14 @@ class Settable:
|
|
178
178
|
self.completer = completer
|
179
179
|
|
180
180
|
def get_value(self) -> Any:
|
181
|
-
"""
|
182
|
-
Get the value of the settable attribute
|
183
|
-
:return:
|
184
|
-
"""
|
181
|
+
"""Get the value of the settable attribute."""
|
185
182
|
return getattr(self.settable_obj, self.settable_attrib_name)
|
186
183
|
|
187
|
-
def set_value(self, value: Any) ->
|
184
|
+
def set_value(self, value: Any) -> None:
|
188
185
|
"""
|
189
|
-
Set the settable attribute on the specified destination object
|
190
|
-
|
191
|
-
:
|
186
|
+
Set the settable attribute on the specified destination object.
|
187
|
+
|
188
|
+
:param value: new value to set
|
192
189
|
"""
|
193
190
|
# Run the value through its type function to handle any conversion or validation
|
194
191
|
new_value = self.val_type(value)
|
@@ -205,7 +202,6 @@ class Settable:
|
|
205
202
|
# Check if we need to call an onchange callback
|
206
203
|
if orig_value != new_value and self.onchange_cb:
|
207
204
|
self.onchange_cb(self.name, orig_value, new_value)
|
208
|
-
return new_value
|
209
205
|
|
210
206
|
|
211
207
|
def is_text_file(file_path: str) -> bool:
|
@@ -184,7 +184,9 @@ autodoc_default_options = {'member-order': 'bysource'}
|
|
184
184
|
nitpick_ignore = [
|
185
185
|
('py:class', 'ArgparseCommandFunc'),
|
186
186
|
('py:class', 'argparse._SubParsersAction'),
|
187
|
+
('py:class', 'cmd2.command_definition.CommandSetType'),
|
187
188
|
('py:class', 'cmd2.decorators.CommandParent'),
|
189
|
+
('py:class', 'cmd2.decorators.CommandParentType'),
|
188
190
|
('py:class', 'cmd2.utils._T'),
|
189
191
|
('py:class', 'CommandParent'),
|
190
192
|
('py:class', 'frame'),
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|