cmd2 2.5.3__tar.gz → 2.5.5__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.
Files changed (249) hide show
  1. {cmd2-2.5.3 → cmd2-2.5.5}/CHANGELOG.md +12 -3
  2. {cmd2-2.5.3 → cmd2-2.5.5}/PKG-INFO +1 -1
  3. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/cmd2.py +7 -4
  4. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/constants.py +3 -0
  5. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/decorators.py +20 -55
  6. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/utils.py +7 -10
  7. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2.egg-info/PKG-INFO +1 -1
  8. {cmd2-2.5.3 → cmd2-2.5.5}/docs/conf.py +1 -0
  9. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_utils.py +4 -1
  10. {cmd2-2.5.3 → cmd2-2.5.5}/.readthedocs.yaml +0 -0
  11. {cmd2-2.5.3 → cmd2-2.5.5}/LICENSE +0 -0
  12. {cmd2-2.5.3 → cmd2-2.5.5}/MANIFEST.in +0 -0
  13. {cmd2-2.5.3 → cmd2-2.5.5}/Pipfile +0 -0
  14. {cmd2-2.5.3 → cmd2-2.5.5}/README.md +0 -0
  15. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/__init__.py +0 -0
  16. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/ansi.py +0 -0
  17. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/argparse_completer.py +0 -0
  18. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/argparse_custom.py +0 -0
  19. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/clipboard.py +0 -0
  20. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/command_definition.py +0 -0
  21. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/exceptions.py +0 -0
  22. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/history.py +0 -0
  23. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/parsing.py +0 -0
  24. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/plugin.py +0 -0
  25. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/py.typed +0 -0
  26. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/py_bridge.py +0 -0
  27. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/rl_utils.py +0 -0
  28. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/table_creator.py +0 -0
  29. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2/transcript.py +0 -0
  30. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2.egg-info/SOURCES.txt +0 -0
  31. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2.egg-info/dependency_links.txt +0 -0
  32. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2.egg-info/requires.txt +0 -0
  33. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2.egg-info/top_level.txt +0 -0
  34. {cmd2-2.5.3 → cmd2-2.5.5}/cmd2.png +0 -0
  35. {cmd2-2.5.3 → cmd2-2.5.5}/docs/Makefile +0 -0
  36. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/ansi.rst +0 -0
  37. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/argparse_completer.rst +0 -0
  38. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/argparse_custom.rst +0 -0
  39. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/cmd.rst +0 -0
  40. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/command_definition.rst +0 -0
  41. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/constants.rst +0 -0
  42. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/decorators.rst +0 -0
  43. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/exceptions.rst +0 -0
  44. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/history.rst +0 -0
  45. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/index.rst +0 -0
  46. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/parsing.rst +0 -0
  47. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/plugin.rst +0 -0
  48. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/plugin_external_test.rst +0 -0
  49. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/py_bridge.rst +0 -0
  50. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/table_creator.rst +0 -0
  51. {cmd2-2.5.3 → cmd2-2.5.5}/docs/api/utils.rst +0 -0
  52. {cmd2-2.5.3 → cmd2-2.5.5}/docs/doc_conventions.rst +0 -0
  53. {cmd2-2.5.3 → cmd2-2.5.5}/docs/examples/alternate_event_loops.rst +0 -0
  54. {cmd2-2.5.3 → cmd2-2.5.5}/docs/examples/first_app.rst +0 -0
  55. {cmd2-2.5.3 → cmd2-2.5.5}/docs/examples/index.rst +0 -0
  56. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/argument_processing.rst +0 -0
  57. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/builtin_commands.rst +0 -0
  58. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/clipboard.rst +0 -0
  59. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/commands.rst +0 -0
  60. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/completion.rst +0 -0
  61. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/disable_commands.rst +0 -0
  62. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/embedded_python_shells.rst +0 -0
  63. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/generating_output.rst +0 -0
  64. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/help.rst +0 -0
  65. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/history.rst +0 -0
  66. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/hooks.rst +0 -0
  67. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/index.rst +0 -0
  68. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/initialization.rst +0 -0
  69. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/misc.rst +0 -0
  70. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/modular_commands.rst +0 -0
  71. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/multiline_commands.rst +0 -0
  72. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/os.rst +0 -0
  73. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/packaging.rst +0 -0
  74. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/plugins.rst +0 -0
  75. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/prompt.rst +0 -0
  76. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/redirection.rst +0 -0
  77. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/scripting.rst +0 -0
  78. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/settings.rst +0 -0
  79. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/shortcuts_aliases_macros.rst +0 -0
  80. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/startup_commands.rst +0 -0
  81. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/table_creation.rst +0 -0
  82. {cmd2-2.5.3 → cmd2-2.5.5}/docs/features/transcripts.rst +0 -0
  83. {cmd2-2.5.3 → cmd2-2.5.5}/docs/index.rst +0 -0
  84. {cmd2-2.5.3 → cmd2-2.5.5}/docs/make.bat +0 -0
  85. {cmd2-2.5.3 → cmd2-2.5.5}/docs/migrating/incompatibilities.rst +0 -0
  86. {cmd2-2.5.3 → cmd2-2.5.5}/docs/migrating/index.rst +0 -0
  87. {cmd2-2.5.3 → cmd2-2.5.5}/docs/migrating/minimum.rst +0 -0
  88. {cmd2-2.5.3 → cmd2-2.5.5}/docs/migrating/next_steps.rst +0 -0
  89. {cmd2-2.5.3 → cmd2-2.5.5}/docs/migrating/summary.rst +0 -0
  90. {cmd2-2.5.3 → cmd2-2.5.5}/docs/migrating/why.rst +0 -0
  91. {cmd2-2.5.3 → cmd2-2.5.5}/docs/overview/alternatives.rst +0 -0
  92. {cmd2-2.5.3 → cmd2-2.5.5}/docs/overview/index.rst +0 -0
  93. {cmd2-2.5.3 → cmd2-2.5.5}/docs/overview/installation.rst +0 -0
  94. {cmd2-2.5.3 → cmd2-2.5.5}/docs/overview/integrating.rst +0 -0
  95. {cmd2-2.5.3 → cmd2-2.5.5}/docs/overview/resources.rst +0 -0
  96. {cmd2-2.5.3 → cmd2-2.5.5}/docs/overview/summary.rst +0 -0
  97. {cmd2-2.5.3 → cmd2-2.5.5}/docs/plugins/external_test.rst +0 -0
  98. {cmd2-2.5.3 → cmd2-2.5.5}/docs/plugins/index.rst +0 -0
  99. {cmd2-2.5.3 → cmd2-2.5.5}/docs/requirements.txt +0 -0
  100. {cmd2-2.5.3 → cmd2-2.5.5}/docs/testing.rst +0 -0
  101. {cmd2-2.5.3 → cmd2-2.5.5}/examples/.cmd2rc +0 -0
  102. {cmd2-2.5.3 → cmd2-2.5.5}/examples/alias_startup.py +0 -0
  103. {cmd2-2.5.3 → cmd2-2.5.5}/examples/arg_decorators.py +0 -0
  104. {cmd2-2.5.3 → cmd2-2.5.5}/examples/arg_print.py +0 -0
  105. {cmd2-2.5.3 → cmd2-2.5.5}/examples/argparse_completion.py +0 -0
  106. {cmd2-2.5.3 → cmd2-2.5.5}/examples/async_printing.py +0 -0
  107. {cmd2-2.5.3 → cmd2-2.5.5}/examples/basic.py +0 -0
  108. {cmd2-2.5.3 → cmd2-2.5.5}/examples/basic_completion.py +0 -0
  109. {cmd2-2.5.3 → cmd2-2.5.5}/examples/cmd_as_argument.py +0 -0
  110. {cmd2-2.5.3 → cmd2-2.5.5}/examples/colors.py +0 -0
  111. {cmd2-2.5.3 → cmd2-2.5.5}/examples/custom_parser.py +0 -0
  112. {cmd2-2.5.3 → cmd2-2.5.5}/examples/decorator_example.py +0 -0
  113. {cmd2-2.5.3 → cmd2-2.5.5}/examples/default_categories.py +0 -0
  114. {cmd2-2.5.3 → cmd2-2.5.5}/examples/dynamic_commands.py +0 -0
  115. {cmd2-2.5.3 → cmd2-2.5.5}/examples/environment.py +0 -0
  116. {cmd2-2.5.3 → cmd2-2.5.5}/examples/event_loops.py +0 -0
  117. {cmd2-2.5.3 → cmd2-2.5.5}/examples/example.py +0 -0
  118. {cmd2-2.5.3 → cmd2-2.5.5}/examples/exit_code.py +0 -0
  119. {cmd2-2.5.3 → cmd2-2.5.5}/examples/first_app.py +0 -0
  120. {cmd2-2.5.3 → cmd2-2.5.5}/examples/hello_cmd2.py +0 -0
  121. {cmd2-2.5.3 → cmd2-2.5.5}/examples/help_categories.py +0 -0
  122. {cmd2-2.5.3 → cmd2-2.5.5}/examples/hooks.py +0 -0
  123. {cmd2-2.5.3 → cmd2-2.5.5}/examples/initialization.py +0 -0
  124. {cmd2-2.5.3 → cmd2-2.5.5}/examples/migrating.py +0 -0
  125. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands/__init__.py +0 -0
  126. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands/commandset_basic.py +0 -0
  127. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands/commandset_complex.py +0 -0
  128. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands/commandset_custominit.py +0 -0
  129. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands_basic.py +0 -0
  130. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands_dynamic.py +0 -0
  131. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_commands_main.py +0 -0
  132. {cmd2-2.5.3 → cmd2-2.5.5}/examples/modular_subcommands.py +0 -0
  133. {cmd2-2.5.3 → cmd2-2.5.5}/examples/override_parser.py +0 -0
  134. {cmd2-2.5.3 → cmd2-2.5.5}/examples/paged_output.py +0 -0
  135. {cmd2-2.5.3 → cmd2-2.5.5}/examples/persistent_history.py +0 -0
  136. {cmd2-2.5.3 → cmd2-2.5.5}/examples/pirate.py +0 -0
  137. {cmd2-2.5.3 → cmd2-2.5.5}/examples/python_scripting.py +0 -0
  138. {cmd2-2.5.3 → cmd2-2.5.5}/examples/read_input.py +0 -0
  139. {cmd2-2.5.3 → cmd2-2.5.5}/examples/remove_builtin_commands.py +0 -0
  140. {cmd2-2.5.3 → cmd2-2.5.5}/examples/remove_settable.py +0 -0
  141. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/arg_printer.py +0 -0
  142. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/conditional.py +0 -0
  143. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/nested.txt +0 -0
  144. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/quit.txt +0 -0
  145. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/save_help_text.py +0 -0
  146. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/script.py +0 -0
  147. {cmd2-2.5.3 → cmd2-2.5.5}/examples/scripts/script.txt +0 -0
  148. {cmd2-2.5.3 → cmd2-2.5.5}/examples/subcommands.py +0 -0
  149. {cmd2-2.5.3 → cmd2-2.5.5}/examples/table_creation.py +0 -0
  150. {cmd2-2.5.3 → cmd2-2.5.5}/examples/transcripts/exampleSession.txt +0 -0
  151. {cmd2-2.5.3 → cmd2-2.5.5}/examples/transcripts/pirate.transcript +0 -0
  152. {cmd2-2.5.3 → cmd2-2.5.5}/examples/transcripts/quit.txt +0 -0
  153. {cmd2-2.5.3 → cmd2-2.5.5}/examples/transcripts/transcript_regex.txt +0 -0
  154. {cmd2-2.5.3 → cmd2-2.5.5}/examples/unicode_commands.py +0 -0
  155. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/README.txt +0 -0
  156. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/CHANGELOG.md +0 -0
  157. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/README.md +0 -0
  158. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/build-pyenvs.sh +0 -0
  159. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/cmd2_ext_test/__init__.py +0 -0
  160. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/cmd2_ext_test/cmd2_ext_test.py +0 -0
  161. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/cmd2_ext_test/py.typed +0 -0
  162. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/cmd2_ext_test/pylintrc +0 -0
  163. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/examples/example.py +0 -0
  164. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/noxfile.py +0 -0
  165. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/pyproject.toml +0 -0
  166. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/setup.py +0 -0
  167. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/tasks.py +0 -0
  168. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/tests/__init__.py +0 -0
  169. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/tests/pylintrc +0 -0
  170. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/ext_test/tests/test_ext_test.py +0 -0
  171. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/tasks.py +0 -0
  172. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/CHANGELOG.md +0 -0
  173. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/LICENSE +0 -0
  174. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/README.md +0 -0
  175. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/build-pyenvs.sh +0 -0
  176. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/cmd2_myplugin/__init__.py +0 -0
  177. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/cmd2_myplugin/myplugin.py +0 -0
  178. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/cmd2_myplugin/pylintrc +0 -0
  179. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/examples/example.py +0 -0
  180. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/noxfile.py +0 -0
  181. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/setup.py +0 -0
  182. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/tasks.py +0 -0
  183. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/tests/__init__.py +0 -0
  184. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/tests/pylintrc +0 -0
  185. {cmd2-2.5.3 → cmd2-2.5.5}/plugins/template/tests/test_myplugin.py +0 -0
  186. {cmd2-2.5.3 → cmd2-2.5.5}/pyproject.toml +0 -0
  187. {cmd2-2.5.3 → cmd2-2.5.5}/readme_files/shout_out.csv +0 -0
  188. {cmd2-2.5.3 → cmd2-2.5.5}/readme_files/shoutout.txt +0 -0
  189. {cmd2-2.5.3 → cmd2-2.5.5}/setup.cfg +0 -0
  190. {cmd2-2.5.3 → cmd2-2.5.5}/tasks.py +0 -0
  191. {cmd2-2.5.3 → cmd2-2.5.5}/tests/.cmd2rc +0 -0
  192. {cmd2-2.5.3 → cmd2-2.5.5}/tests/__init__.py +0 -0
  193. {cmd2-2.5.3 → cmd2-2.5.5}/tests/conftest.py +0 -0
  194. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/echo.py +0 -0
  195. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/environment.py +0 -0
  196. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/help.py +0 -0
  197. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/py_locals.py +0 -0
  198. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/pyscript_dir.py +0 -0
  199. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/raises_exception.py +0 -0
  200. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/recursive.py +0 -0
  201. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/self_in_py.py +0 -0
  202. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/stdout_capture.py +0 -0
  203. {cmd2-2.5.3 → cmd2-2.5.5}/tests/pyscript/stop.py +0 -0
  204. {cmd2-2.5.3 → cmd2-2.5.5}/tests/relative_multiple.txt +0 -0
  205. {cmd2-2.5.3 → cmd2-2.5.5}/tests/script.py +0 -0
  206. {cmd2-2.5.3 → cmd2-2.5.5}/tests/script.txt +0 -0
  207. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/binary.bin +0 -0
  208. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/empty.txt +0 -0
  209. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/help.txt +0 -0
  210. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/nested.txt +0 -0
  211. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/one_down.txt +0 -0
  212. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/postcmds.txt +0 -0
  213. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/precmds.txt +0 -0
  214. {cmd2-2.5.3 → cmd2-2.5.5}/tests/scripts/utf8.txt +0 -0
  215. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_ansi.py +0 -0
  216. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_argparse.py +0 -0
  217. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_argparse_completer.py +0 -0
  218. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_argparse_custom.py +0 -0
  219. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_cmd2.py +0 -0
  220. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_completion.py +0 -0
  221. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_history.py +0 -0
  222. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_parsing.py +0 -0
  223. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_plugin.py +0 -0
  224. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_run_pyscript.py +0 -0
  225. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_table_creator.py +0 -0
  226. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_transcript.py +0 -0
  227. {cmd2-2.5.3 → cmd2-2.5.5}/tests/test_utils_defining_class.py +0 -0
  228. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/bol_eol.txt +0 -0
  229. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/characterclass.txt +0 -0
  230. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/dotstar.txt +0 -0
  231. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/extension_notation.txt +0 -0
  232. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/failure.txt +0 -0
  233. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/from_cmdloop.txt +0 -0
  234. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/multiline_no_regex.txt +0 -0
  235. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/multiline_regex.txt +0 -0
  236. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/no_output.txt +0 -0
  237. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/no_output_last.txt +0 -0
  238. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/regex_set.txt +0 -0
  239. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/singleslash.txt +0 -0
  240. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/slashes_escaped.txt +0 -0
  241. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/slashslash.txt +0 -0
  242. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/spaces.txt +0 -0
  243. {cmd2-2.5.3 → cmd2-2.5.5}/tests/transcripts/word_boundaries.txt +0 -0
  244. {cmd2-2.5.3 → cmd2-2.5.5}/tests_isolated/__init__.py +0 -0
  245. {cmd2-2.5.3 → cmd2-2.5.5}/tests_isolated/test_commandset/__init__.py +0 -0
  246. {cmd2-2.5.3 → cmd2-2.5.5}/tests_isolated/test_commandset/conftest.py +0 -0
  247. {cmd2-2.5.3 → cmd2-2.5.5}/tests_isolated/test_commandset/test_argparse_subcommands.py +0 -0
  248. {cmd2-2.5.3 → cmd2-2.5.5}/tests_isolated/test_commandset/test_categories.py +0 -0
  249. {cmd2-2.5.3 → cmd2-2.5.5}/tests_isolated/test_commandset/test_commandset.py +0 -0
@@ -1,14 +1,23 @@
1
- # 2.5.3 (November 5, 2024)
1
+ ## 2.5.5 (November 13, 2024)
2
+ * Bug Fixes
3
+ * Fixed type hints for passing a class method to `with_argparser` and `as_subcommand_to`.
4
+ * Fixed issue where `set` command was not always printing a settable's current value.
5
+
6
+ ## 2.5.4 (November 6, 2024)
7
+ * Bug Fixes
8
+ * Fixed `ZeroDivisionError` in `async_alert()` when `shutil.get_terminal_size().columns` is 0.
9
+
10
+ ## 2.5.3 (November 5, 2024)
2
11
  * Enhancements
3
12
  * Changed `CommandSet._cmd` to a read-only property which never returns `None` because it
4
13
  is meant to be called after the `CommandSet` is registered. This addresses type checker
5
14
  errors that occurred if `CommandSet._cmd` wasn't cast or checked if `None` before use.
6
15
 
7
- # 2.5.2 (November 3, 2024)
16
+ ## 2.5.2 (November 3, 2024)
8
17
  * Bug Fixes
9
18
  * Fixed default `pytest` execution when not using cmd2's custom `invoke` command via `inv pytest`
10
19
 
11
- # 2.5.1 (November 2, 2024)
20
+ ## 2.5.1 (November 2, 2024)
12
21
  * Bug Fixes
13
22
  * Fixed readline bug when using `ipy` command with `gnureadline` and Python 3.13
14
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cmd2
3
- Version: 2.5.3
3
+ Version: 2.5.5
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: The MIT License (MIT)
@@ -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 print_topics() to handle strings with ANSI style sequences and wide characters
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
- new_value = settable.set_value(utils.strip_quotes(args.value))
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: {new_value!r}")
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
 
@@ -5335,9 +5335,12 @@ class Cmd(cmd.Cmd):
5335
5335
  if update_terminal:
5336
5336
  import shutil
5337
5337
 
5338
+ # Prior to Python 3.11 this can return 0, so use a fallback if needed.
5339
+ terminal_columns = shutil.get_terminal_size().columns or constants.DEFAULT_TERMINAL_WIDTH
5340
+
5338
5341
  # Print a string which replaces the onscreen prompt and input lines with the alert.
5339
5342
  terminal_str = ansi.async_alert_str(
5340
- terminal_columns=shutil.get_terminal_size().columns,
5343
+ terminal_columns=terminal_columns,
5341
5344
  prompt=rl_get_display_prompt(),
5342
5345
  line=readline.get_line_buffer(),
5343
5346
  cursor_offset=rl_get_point(),
@@ -57,3 +57,6 @@ PARSER_ATTR_COMMANDSET = 'command_set'
57
57
 
58
58
  # custom attributes added to argparse Namespaces
59
59
  NS_ATTR_SUBCMD_HANDLER = '__subcmd_handler__'
60
+
61
+ # For cases prior to Python 3.11 when shutil.get_terminal_size().columns can return 0.
62
+ DEFAULT_TERMINAL_WIDTH = 80
@@ -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[argparse.ArgumentParser, Callable[[], argparse.ArgumentParser]],
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[argparse.ArgumentParser, Callable[[], argparse.ArgumentParser]],
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 ArgumentParser.add_subparser().
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
- ArgumentParser.add_subparser().
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 ArgumentParser.add_subparser()
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) -> Any:
184
+ def set_value(self, value: Any) -> None:
188
185
  """
189
- Set the settable attribute on the specified destination object
190
- :param value: New value to set
191
- :return: New value that the attribute was set to
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:
@@ -874,7 +870,8 @@ def align_text(
874
870
  )
875
871
 
876
872
  if width is None:
877
- width = shutil.get_terminal_size().columns
873
+ # Prior to Python 3.11 this can return 0, so use a fallback if needed.
874
+ width = shutil.get_terminal_size().columns or constants.DEFAULT_TERMINAL_WIDTH
878
875
 
879
876
  if width < 1:
880
877
  raise ValueError("width must be at least 1")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cmd2
3
- Version: 2.5.3
3
+ Version: 2.5.5
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: The MIT License (MIT)
@@ -185,6 +185,7 @@ nitpick_ignore = [
185
185
  ('py:class', 'ArgparseCommandFunc'),
186
186
  ('py:class', 'argparse._SubParsersAction'),
187
187
  ('py:class', 'cmd2.decorators.CommandParent'),
188
+ ('py:class', 'cmd2.decorators.CommandParentType'),
188
189
  ('py:class', 'cmd2.utils._T'),
189
190
  ('py:class', 'CommandParent'),
190
191
  ('py:class', 'frame'),
@@ -17,6 +17,7 @@ import pytest
17
17
  import cmd2.utils as cu
18
18
  from cmd2 import (
19
19
  ansi,
20
+ constants,
20
21
  )
21
22
  from cmd2.constants import (
22
23
  HORIZONTAL_ELLIPSIS,
@@ -624,7 +625,9 @@ def test_align_text_term_width():
624
625
  text = 'foo'
625
626
  fill_char = ' '
626
627
 
627
- term_width = shutil.get_terminal_size().columns
628
+ # Prior to Python 3.11 this can return 0, so use a fallback, so
629
+ # use the same fallback that cu.align_text() does if needed.
630
+ term_width = shutil.get_terminal_size().columns or constants.DEFAULT_TERMINAL_WIDTH
628
631
  expected_fill = (term_width - ansi.style_aware_wcswidth(text)) * fill_char
629
632
 
630
633
  aligned = cu.align_text(text, cu.TextAlignment.LEFT, fill_char=fill_char)
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