cmd2 4.0.0rc2__tar.gz → 4.1.0__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-4.0.0rc2 → cmd2-4.1.0}/.pre-commit-config.yaml +2 -2
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/CHANGELOG.md +72 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/GEMINI.md +2 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/PKG-INFO +21 -19
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/README.md +20 -18
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/__init__.py +6 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/annotated.py +933 -149
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/cmd2.py +61 -46
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/pt_utils.py +9 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/styles.py +4 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2.egg-info/PKG-INFO +21 -19
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2.egg-info/SOURCES.txt +3 -0
- cmd2-4.1.0/cmd2.egg-info/scm_file_list.json +228 -0
- cmd2-4.1.0/cmd2.egg-info/scm_version.json +8 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/index.md +3 -0
- cmd2-4.1.0/docs/api/theme.md +3 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/annotated.md +344 -27
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/initialization.md +0 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/prompt.md +14 -6
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/migrating/index.md +4 -3
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/overview/installation.md +1 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/upgrades.md +2 -3
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/annotated_example.py +198 -9
- cmd2-4.1.0/examples/getting_started.py +228 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/mkdocs.yml +2 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/pyproject.toml +1 -1
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_annotated.py +2139 -78
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_cmd2.py +68 -45
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_pt_utils.py +30 -0
- cmd2-4.0.0rc2/examples/getting_started.py +0 -138
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/.prettierignore +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/.prettierrc +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/.typos.toml +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/LICENSE +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/MANIFEST.in +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/Makefile +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/argparse_completer.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/argparse_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/clipboard.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/colors.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/command_set.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/completion.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/constants.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/decorators.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/exceptions.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/history.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/parsing.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/plugin.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/py.typed +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/py_bridge.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/rich_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/string_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/theme.py +12 -12
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/types.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2/utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2.egg-info/dependency_links.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2.egg-info/requires.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2.egg-info/top_level.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/cmd2.png +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/codecov.yml +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/annotated.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/argparse_completer.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/argparse_utils.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/clipboard.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/cmd.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/colors.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/command_set.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/completion.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/constants.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/decorators.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/exceptions.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/history.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/parsing.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/plugin.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/pt_utils.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/py_bridge.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/rich_utils.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/string_utils.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/styles.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/api/utils.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/doc_conventions.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/examples/alternate_event_loops.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/examples/examples.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/examples/getting_started.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/examples/index.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/argument_processing.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/async_commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/builtin_commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/clipboard.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/completion.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/disable_commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/embedded_python_shells.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/generating_output.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/help.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/history.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/hooks.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/index.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/misc.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/modular_commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/multiline_commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/os.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/packaging.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/plugins.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/redirection.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/scripting.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/settings.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/shortcuts_aliases_macros.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/startup_commands.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/table_creation.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/features/theme.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/index.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/javascripts/readthedocs.js +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/migrating/incompatibilities.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/migrating/minimum.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/migrating/next_steps.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/migrating/why.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/mixins/index.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/mixins/mixin_template.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/overrides/main.html +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/overview/alternatives.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/overview/index.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/overview/integrating.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/overview/resources.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/stylesheets/cmd2.css +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/docs/testing.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/.cmd2rc +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/README.md +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/argparse_completion.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/argparse_example.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/async_call.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/async_commands.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/async_printing.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/basic_completion.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/cmd2_history.dat +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/cmd_as_argument.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/color.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/command_sets.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/completion_item_choices.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/custom_parser.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/custom_types.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/default_categories.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/dynamic_commands.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/environment.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/event_loops.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/exit_code.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/hello_cmd2.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/help_categories.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/hooks.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/migrating.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/mixin.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/modular_commands/__init__.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/modular_commands/commandset_basic.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/modular_commands/commandset_complex.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/modular_commands/commandset_custominit.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/modular_commandsets.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/paged_output.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/persistent_history.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/pretty_print.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/python_scripting.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/read_input.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/remove_builtin_commands.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/remove_settable.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/rich_tables.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/rich_theme.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/arg_printer.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/conditional.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/nested.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/quit.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/save_help_text.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/script.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/scripts/script.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/tmux_launch.sh +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/tmux_split.sh +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/examples/unicode_commands.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/package.json +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/ruff.toml +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/scripts/validate_tag.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/setup.cfg +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/.cmd2rc +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/__init__.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/conftest.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/echo.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/environment.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/help.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/py_locals.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/pyscript_dir.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/raises_exception.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/recursive.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/self_in_py.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/stop.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/pyscript/test_print.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/relative_multiple.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/script.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/script.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/binary.bin +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/empty.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/help.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/nested.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/one_down.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/postcmds.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/precmds.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/scripts/utf8.txt +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_argparse.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_argparse_completer.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_argparse_subcommands.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_argparse_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_categories.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_commandset.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_completion.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_dynamic_complete_style.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_future_annotations.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_history.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_parsing.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_plugin.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_py_completion.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_rich_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_run_pyscript.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_string_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_theme.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_utils.py +0 -0
- {cmd2-4.0.0rc2 → cmd2-4.1.0}/tests/test_utils_defining_class.py +0 -0
|
@@ -14,7 +14,7 @@ repos:
|
|
|
14
14
|
- id: trailing-whitespace
|
|
15
15
|
|
|
16
16
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
17
|
-
rev: "v0.15.
|
|
17
|
+
rev: "v0.15.17"
|
|
18
18
|
hooks:
|
|
19
19
|
- id: ruff-format
|
|
20
20
|
args: [--config=ruff.toml]
|
|
@@ -30,7 +30,7 @@ repos:
|
|
|
30
30
|
- prettier-plugin-toml@2.0.6
|
|
31
31
|
|
|
32
32
|
- repo: https://github.com/crate-ci/typos
|
|
33
|
-
rev: v1.47.
|
|
33
|
+
rev: v1.47.2
|
|
34
34
|
hooks:
|
|
35
35
|
- id: typos
|
|
36
36
|
exclude: |
|
|
@@ -1,4 +1,75 @@
|
|
|
1
|
-
## 4.
|
|
1
|
+
## 4.1.0 (July 7, 2026)
|
|
2
|
+
|
|
3
|
+
- Breaking Changes
|
|
4
|
+
- Renamed the `bottom_toolbar` argument in `Cmd.__init__()` to `enable_bottom_toolbar`. It is
|
|
5
|
+
also now strictly an `__init__` parameter and not an instance attribute.
|
|
6
|
+
- `complete_in_thread` is now strictly an `__init__` parameter and not an instance attribute of
|
|
7
|
+
`Cmd`.
|
|
8
|
+
- `get_rprompt()` is now only called if the `enable_rprompt` argument in `Cmd.__init__()` is set
|
|
9
|
+
to `True`.
|
|
10
|
+
- Bug Fixes
|
|
11
|
+
- Fixed type hinting so that methods decorated with `with_annotated` no longer trigger spurious
|
|
12
|
+
mypy errors and preserve their original signature.
|
|
13
|
+
- Fixed cmd2 bypassing NO_COLOR and allow_style when setting prompt-toolkit's color depth.
|
|
14
|
+
- Enhancements
|
|
15
|
+
- New `cmd2.Cmd` parameters
|
|
16
|
+
- **complete_in_thread**: (boolean) if `True`, then completion will run in a separate
|
|
17
|
+
thread. If `False` then completion runs in the main thread and causes it to block if slow.
|
|
18
|
+
Defaults to `True`.
|
|
19
|
+
- **refresh_interval**: (float) How often, in seconds, to automatically refresh the UI.
|
|
20
|
+
Defaults to 0.0. This is used for bottom toolbars and right prompts which have dynamic
|
|
21
|
+
content needing to be refreshed at regular intervals and not just when a key is pressed.
|
|
22
|
+
- Improved
|
|
23
|
+
[getting_started.py](https://github.com/python-cmd2/cmd2/blob/main/examples/getting_started.py)
|
|
24
|
+
example
|
|
25
|
+
- Shows how to properly and safely use a background thread to update the bottom toolbar with
|
|
26
|
+
dynamic content
|
|
27
|
+
- Demonstrates how to use the `@with_argparser` and `@with_argument_block` decorators for
|
|
28
|
+
parsing command arguments
|
|
29
|
+
- Experimental features
|
|
30
|
+
- `@with_annotated` now supports `frozenset[T]` collection parameters, alongside the existing
|
|
31
|
+
`list[T]`, `set[T]`, and `tuple[T, ...]` collection types.
|
|
32
|
+
- `@with_annotated` mutually exclusive groups now accept a `title`/`description` to render the
|
|
33
|
+
group as a titled help section (argparse's one supported nesting, a mutex inside an argument
|
|
34
|
+
group), declared in one place with no paired `groups=` entry.
|
|
35
|
+
- `@with_annotated` now validates `groups` / `mutually_exclusive_groups` specs eagerly at
|
|
36
|
+
decoration time, so a misconfigured group (a member that names no parameter, a parameter
|
|
37
|
+
placed in two groups, a mutex group spanning or partially overlapping argument groups, a
|
|
38
|
+
titled section declared in two places, or `Group(required=True)` on a plain group) hard-fails
|
|
39
|
+
when the class is defined instead of being deferred to first command use where the error was
|
|
40
|
+
swallowed. The checks read parameter names only, so forward-referenced annotations still
|
|
41
|
+
decorate cleanly.
|
|
42
|
+
- `Argument`/`Option` accept a new `allow_unknown_entry` flag for `Enum` parameters. When set, a
|
|
43
|
+
command-line token matched by neither a member value nor name is routed through the enum's own
|
|
44
|
+
[`_missing_`](https://docs.python.org/3/library/enum.html#enum.Enum._missing_) hook, so an
|
|
45
|
+
enum can resolve aliases, alternate spellings, or special keywords. A token that `_missing_`
|
|
46
|
+
declines (returns `None`) is still rejected.
|
|
47
|
+
- `@with_annotated` now supports a union of `Enum` subclasses (e.g. `EnumA | EnumB`). Each
|
|
48
|
+
member keeps its own converter and a token resolves to the first member that accepts it, so
|
|
49
|
+
when two members share a representation the earlier one in the union wins. A member whose
|
|
50
|
+
`_missing_` raises on a token declines it (the next member is still tried) rather than
|
|
51
|
+
aborting the union, and a merged "choose from ..." error is raised only when every member
|
|
52
|
+
declines. Unions containing a `Literal` or any non-`Enum` member are still rejected as
|
|
53
|
+
ambiguous.
|
|
54
|
+
- `Argument`/`Option` accept new `converter` and `preprocess` hooks for custom string
|
|
55
|
+
conversion, giving `@with_annotated` parity with a hand-built `add_argument(type=...)` (a raw
|
|
56
|
+
`type=` in the metadata is still rejected). `converter` is a `Callable[[str], Any]` that
|
|
57
|
+
replaces the inferred `type=` converter; because it owns the conversion, the annotation may be
|
|
58
|
+
any type (an otherwise unsupported type like `datetime`, or an otherwise-ambiguous
|
|
59
|
+
multi-member union like `int | str`, becomes legal) and the inferred `choices`/completer are
|
|
60
|
+
dropped. `preprocess` is a `Callable[[str], str]` that runs before the inferred converter,
|
|
61
|
+
transforming the raw token while keeping the inferred `type=`/`choices`/completer (e.g.
|
|
62
|
+
`preprocess=str.lower` on an `Enum`). The two are mutually exclusive on one parameter and
|
|
63
|
+
neither may be combined with a value-less action.
|
|
64
|
+
- `@with_annotated` now supports reusable argument blocks: a parameter typed with a `@dataclass`
|
|
65
|
+
that subclasses the new `cmd2.ArgumentBlock` trait expands each field into a flat command-line
|
|
66
|
+
argument, and the parsed values are reconstructed into a dataclass instance passed to the
|
|
67
|
+
command, letting several commands reuse the same fields without duplication. See the
|
|
68
|
+
[annotated](docs/features/annotated.md) documentation.
|
|
69
|
+
- A command can share an argument block with its subcommands via `cmd2_base_args` /
|
|
70
|
+
`cmd2_parent_args` parameters, passing parent-level options down without redeclaring them.
|
|
71
|
+
|
|
72
|
+
## 4.0.0 (June 5, 2026)
|
|
2
73
|
|
|
3
74
|
### Summary
|
|
4
75
|
|
|
@@ -13,6 +13,8 @@ Python project, which utilizes `uv` for environment and package management.
|
|
|
13
13
|
- To run programs directly from a PyPI package (installing it on the fly if necessary), use
|
|
14
14
|
`uvx ...` (shortcut for `uv tool run`).
|
|
15
15
|
- **New Dependencies:** If a new dependency is required, please state the reason for its inclusion.
|
|
16
|
+
- Do not commit spec, plan, or markdown documents to git without asking first.
|
|
17
|
+
- Save plans to `~/.superpowers/plans/` instead of the project directory.
|
|
16
18
|
|
|
17
19
|
## Python Code Standards
|
|
18
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cmd2
|
|
3
|
-
Version: 4.0
|
|
3
|
+
Version: 4.1.0
|
|
4
4
|
Summary: cmd2 - quickly build feature-rich and user-friendly interactive command line applications in Python
|
|
5
5
|
Author: cmd2 Contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -55,7 +55,7 @@ of cmd to make your life easier and eliminates much of the boilerplate code whic
|
|
|
55
55
|
when using cmd.
|
|
56
56
|
|
|
57
57
|
> :warning: **If you are upgrading from an older version of `cmd2`, both `3.x` and `4.x` have some
|
|
58
|
-
> significant backwards incompatibilities from
|
|
58
|
+
> significant backwards incompatibilities from previous versions. Please see the
|
|
59
59
|
> [CHANGELOG](./CHANGELOG.md) for info on what has changed and the
|
|
60
60
|
> [Migration Guide](https://cmd2.readthedocs.io/en/latest/upgrades/) for tips on upgrading from an
|
|
61
61
|
> older version of `cmd2` to `4.x`**
|
|
@@ -183,23 +183,25 @@ reproduce the bug. At a minimum, please state the following:
|
|
|
183
183
|
|
|
184
184
|
## Projects using cmd2
|
|
185
185
|
|
|
186
|
-
| Application Name | Description
|
|
187
|
-
| --------------------------------------------------------------- |
|
|
188
|
-
| [CephFS Shell](https://github.com/ceph/ceph) | The Ceph File System, or CephFS, is a POSIX-compliant file system built on top of Ceph’s distributed object store
|
|
189
|
-
| [garak](https://github.com/NVIDIA/garak) | LLM vulnerability scanner that checks if an LLM can be made to fail in a way we don't want
|
|
190
|
-
| [
|
|
191
|
-
| [
|
|
192
|
-
| [
|
|
193
|
-
| [
|
|
194
|
-
| [
|
|
195
|
-
| [
|
|
196
|
-
| [
|
|
197
|
-
| [
|
|
198
|
-
| [
|
|
199
|
-
| [
|
|
200
|
-
| [
|
|
201
|
-
| [
|
|
202
|
-
| [
|
|
186
|
+
| Application Name | Description | Organization or Author |
|
|
187
|
+
| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
188
|
+
| [CephFS Shell](https://github.com/ceph/ceph) | The Ceph File System, or CephFS, is a POSIX-compliant file system built on top of Ceph’s distributed object store | [ceph](https://ceph.com/) |
|
|
189
|
+
| [garak](https://github.com/NVIDIA/garak) | LLM vulnerability scanner that checks if an LLM can be made to fail in a way we don't want | [NVIDIA](https://github.com/NVIDIA) |
|
|
190
|
+
| [Argus](https://github.com/jasonxtn/argus) | The Ultimate Information Gathering Toolkit | [JASON13](https://github.com/jasonxtn) |
|
|
191
|
+
| [medusa](https://github.com/Ch0pin/medusa) | Binary instrumentation framework that that automates processes for the dynamic analysis of Android and iOS Applications | [Ch0pin](https://github.com/Ch0pin) |
|
|
192
|
+
| [InternalBlue](https://github.com/seemoo-lab/internalblue) | Bluetooth experimentation framework for Broadcom and Cypress chips | [Secure Mobile Networking Lab](https://github.com/seemoo-lab) |
|
|
193
|
+
| [SCCMHunter](https://github.com/garrettfoster13/sccmhunter) | A post-ex tool built to streamline identifying, profiling, and attacking SCCM related assets in an Active Directory domain | [Garret Foster](https://github.com/garrettfoster13) |
|
|
194
|
+
| [Unipacker](https://github.com/unipacker/unipacker) | Automatic and platform-independent unpacker for Windows binaries based on emulation | [unipacker](https://github.com/unipacker) |
|
|
195
|
+
| [Frankenstein](https://github.com/seemoo-lab/frankenstein) | Broadcom and Cypress firmware emulation for fuzzing and further full-stack debugging | [Secure Mobile Networking Lab](https://github.com/seemoo-lab) |
|
|
196
|
+
| [Poseidon](https://github.com/faucetsdn/poseidon) | Leverages software-defined networks (SDNs) to acquire and then feed network traffic to a number of machine learning techniques. | [Faucet SDN](https://github.com/faucetsdn) |
|
|
197
|
+
| [DFTimewolf](https://github.com/log2timeline/dftimewolf) | A framework for orchestrating forensic collection, processing and data export | [log2timeline](https://github.com/log2timeline) |
|
|
198
|
+
| [LazyOwn](https://github.com/grisuno/LazyOwn) | The first RedTeam/APT Framework with an AI-powered C&C, featuring rootkits to conceal campaigns, undetectable malleable implants | [Grisuno](https://github.com/grisuno) |
|
|
199
|
+
| [GAP SDK](https://github.com/GreenWaves-Technologies/gap_sdk) | SDK for Greenwaves Technologies' GAP8 IoT Application Processor | [GreenWaves Technologies](https://github.com/GreenWaves-Technologies) |
|
|
200
|
+
| [REW Sploit](https://github.com/REW-sploit/REW-sploit) | Emulate and Dissect Metasploit Framework (MSF) and other attacks | [REW-sploit](https://github.com/REW-sploit) |
|
|
201
|
+
| [tomcatmanager](https://github.com/tomcatmanager/tomcatmanager) | A command line tool and python library for managing a tomcat server | [tomcatmanager](https://github.com/tomcatmanager) |
|
|
202
|
+
| [Falcon Toolkit](https://github.com/CrowdStrike/Falcon-Toolkit) | Unleash the power of the CrowdStrike Falcon Platform at the CLI | [CrowdStrike](https://github.com/CrowdStrike) |
|
|
203
|
+
| [EXPLIoT](https://gitlab.com/expliot_framework/expliot) | Internet of Things Security Testing and Exploitation framework | [expliot_framework](https://gitlab.com/expliot_framework/) |
|
|
204
|
+
| [Pobshell](https://github.com/pdalloz/pobshell) | A Bash‑like shell for live Python objects: `cd`, `ls`, `cat`, `find` and _CLI piping_ for object code, str values & more | [Peter Dalloz](https://www.linkedin.com/in/pdalloz) |
|
|
203
205
|
|
|
204
206
|
Possibly defunct but still good examples
|
|
205
207
|
|
|
@@ -26,7 +26,7 @@ of cmd to make your life easier and eliminates much of the boilerplate code whic
|
|
|
26
26
|
when using cmd.
|
|
27
27
|
|
|
28
28
|
> :warning: **If you are upgrading from an older version of `cmd2`, both `3.x` and `4.x` have some
|
|
29
|
-
> significant backwards incompatibilities from
|
|
29
|
+
> significant backwards incompatibilities from previous versions. Please see the
|
|
30
30
|
> [CHANGELOG](./CHANGELOG.md) for info on what has changed and the
|
|
31
31
|
> [Migration Guide](https://cmd2.readthedocs.io/en/latest/upgrades/) for tips on upgrading from an
|
|
32
32
|
> older version of `cmd2` to `4.x`**
|
|
@@ -154,23 +154,25 @@ reproduce the bug. At a minimum, please state the following:
|
|
|
154
154
|
|
|
155
155
|
## Projects using cmd2
|
|
156
156
|
|
|
157
|
-
| Application Name | Description
|
|
158
|
-
| --------------------------------------------------------------- |
|
|
159
|
-
| [CephFS Shell](https://github.com/ceph/ceph) | The Ceph File System, or CephFS, is a POSIX-compliant file system built on top of Ceph’s distributed object store
|
|
160
|
-
| [garak](https://github.com/NVIDIA/garak) | LLM vulnerability scanner that checks if an LLM can be made to fail in a way we don't want
|
|
161
|
-
| [
|
|
162
|
-
| [
|
|
163
|
-
| [
|
|
164
|
-
| [
|
|
165
|
-
| [
|
|
166
|
-
| [
|
|
167
|
-
| [
|
|
168
|
-
| [
|
|
169
|
-
| [
|
|
170
|
-
| [
|
|
171
|
-
| [
|
|
172
|
-
| [
|
|
173
|
-
| [
|
|
157
|
+
| Application Name | Description | Organization or Author |
|
|
158
|
+
| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
159
|
+
| [CephFS Shell](https://github.com/ceph/ceph) | The Ceph File System, or CephFS, is a POSIX-compliant file system built on top of Ceph’s distributed object store | [ceph](https://ceph.com/) |
|
|
160
|
+
| [garak](https://github.com/NVIDIA/garak) | LLM vulnerability scanner that checks if an LLM can be made to fail in a way we don't want | [NVIDIA](https://github.com/NVIDIA) |
|
|
161
|
+
| [Argus](https://github.com/jasonxtn/argus) | The Ultimate Information Gathering Toolkit | [JASON13](https://github.com/jasonxtn) |
|
|
162
|
+
| [medusa](https://github.com/Ch0pin/medusa) | Binary instrumentation framework that that automates processes for the dynamic analysis of Android and iOS Applications | [Ch0pin](https://github.com/Ch0pin) |
|
|
163
|
+
| [InternalBlue](https://github.com/seemoo-lab/internalblue) | Bluetooth experimentation framework for Broadcom and Cypress chips | [Secure Mobile Networking Lab](https://github.com/seemoo-lab) |
|
|
164
|
+
| [SCCMHunter](https://github.com/garrettfoster13/sccmhunter) | A post-ex tool built to streamline identifying, profiling, and attacking SCCM related assets in an Active Directory domain | [Garret Foster](https://github.com/garrettfoster13) |
|
|
165
|
+
| [Unipacker](https://github.com/unipacker/unipacker) | Automatic and platform-independent unpacker for Windows binaries based on emulation | [unipacker](https://github.com/unipacker) |
|
|
166
|
+
| [Frankenstein](https://github.com/seemoo-lab/frankenstein) | Broadcom and Cypress firmware emulation for fuzzing and further full-stack debugging | [Secure Mobile Networking Lab](https://github.com/seemoo-lab) |
|
|
167
|
+
| [Poseidon](https://github.com/faucetsdn/poseidon) | Leverages software-defined networks (SDNs) to acquire and then feed network traffic to a number of machine learning techniques. | [Faucet SDN](https://github.com/faucetsdn) |
|
|
168
|
+
| [DFTimewolf](https://github.com/log2timeline/dftimewolf) | A framework for orchestrating forensic collection, processing and data export | [log2timeline](https://github.com/log2timeline) |
|
|
169
|
+
| [LazyOwn](https://github.com/grisuno/LazyOwn) | The first RedTeam/APT Framework with an AI-powered C&C, featuring rootkits to conceal campaigns, undetectable malleable implants | [Grisuno](https://github.com/grisuno) |
|
|
170
|
+
| [GAP SDK](https://github.com/GreenWaves-Technologies/gap_sdk) | SDK for Greenwaves Technologies' GAP8 IoT Application Processor | [GreenWaves Technologies](https://github.com/GreenWaves-Technologies) |
|
|
171
|
+
| [REW Sploit](https://github.com/REW-sploit/REW-sploit) | Emulate and Dissect Metasploit Framework (MSF) and other attacks | [REW-sploit](https://github.com/REW-sploit) |
|
|
172
|
+
| [tomcatmanager](https://github.com/tomcatmanager/tomcatmanager) | A command line tool and python library for managing a tomcat server | [tomcatmanager](https://github.com/tomcatmanager) |
|
|
173
|
+
| [Falcon Toolkit](https://github.com/CrowdStrike/Falcon-Toolkit) | Unleash the power of the CrowdStrike Falcon Platform at the CLI | [CrowdStrike](https://github.com/CrowdStrike) |
|
|
174
|
+
| [EXPLIoT](https://gitlab.com/expliot_framework/expliot) | Internet of Things Security Testing and Exploitation framework | [expliot_framework](https://gitlab.com/expliot_framework/) |
|
|
175
|
+
| [Pobshell](https://github.com/pdalloz/pobshell) | A Bash‑like shell for live Python objects: `cd`, `ls`, `cat`, `find` and _CLI piping_ for object code, str values & more | [Peter Dalloz](https://www.linkedin.com/in/pdalloz) |
|
|
174
176
|
|
|
175
177
|
Possibly defunct but still good examples
|
|
176
178
|
|
|
@@ -11,7 +11,10 @@ from . import (
|
|
|
11
11
|
rich_utils,
|
|
12
12
|
string_utils,
|
|
13
13
|
)
|
|
14
|
-
from .annotated import
|
|
14
|
+
from .annotated import (
|
|
15
|
+
ArgumentBlock,
|
|
16
|
+
with_annotated,
|
|
17
|
+
)
|
|
15
18
|
from .argparse_completer import set_default_argparse_completer
|
|
16
19
|
from .argparse_utils import (
|
|
17
20
|
Cmd2ArgumentParser,
|
|
@@ -88,6 +91,8 @@ __all__: list[str] = [ # noqa: RUF022
|
|
|
88
91
|
"Choices",
|
|
89
92
|
"CompletionItem",
|
|
90
93
|
"Completions",
|
|
94
|
+
# Annotated commands
|
|
95
|
+
"ArgumentBlock",
|
|
91
96
|
# Decorators
|
|
92
97
|
"with_annotated",
|
|
93
98
|
"with_argument_list",
|