cmd2 2.6.1__py3-none-any.whl → 2.7.0__py3-none-any.whl
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/argparse_custom.py +47 -38
- cmd2/cmd2.py +36 -30
- cmd2/decorators.py +8 -0
- {cmd2-2.6.1.dist-info → cmd2-2.7.0.dist-info}/METADATA +46 -37
- {cmd2-2.6.1.dist-info → cmd2-2.7.0.dist-info}/RECORD +8 -8
- {cmd2-2.6.1.dist-info → cmd2-2.7.0.dist-info}/licenses/LICENSE +1 -1
- {cmd2-2.6.1.dist-info → cmd2-2.7.0.dist-info}/WHEEL +0 -0
- {cmd2-2.6.1.dist-info → cmd2-2.7.0.dist-info}/top_level.txt +0 -0
cmd2/argparse_custom.py
CHANGED
@@ -229,14 +229,17 @@ from argparse import (
|
|
229
229
|
ZERO_OR_MORE,
|
230
230
|
ArgumentError,
|
231
231
|
)
|
232
|
-
from collections.abc import
|
233
|
-
|
234
|
-
|
232
|
+
from collections.abc import (
|
233
|
+
Callable,
|
234
|
+
Iterable,
|
235
|
+
Sequence,
|
235
236
|
)
|
237
|
+
from gettext import gettext
|
236
238
|
from typing import (
|
237
239
|
IO,
|
238
240
|
TYPE_CHECKING,
|
239
241
|
Any,
|
242
|
+
ClassVar,
|
240
243
|
NoReturn,
|
241
244
|
Optional,
|
242
245
|
Protocol,
|
@@ -245,6 +248,8 @@ from typing import (
|
|
245
248
|
runtime_checkable,
|
246
249
|
)
|
247
250
|
|
251
|
+
from rich_argparse import RawTextRichHelpFormatter
|
252
|
+
|
248
253
|
from . import (
|
249
254
|
ansi,
|
250
255
|
constants,
|
@@ -991,9 +996,25 @@ setattr(argparse._SubParsersAction, 'remove_parser', _SubParsersAction_remove_pa
|
|
991
996
|
############################################################################################################
|
992
997
|
|
993
998
|
|
994
|
-
class Cmd2HelpFormatter(
|
999
|
+
class Cmd2HelpFormatter(RawTextRichHelpFormatter):
|
995
1000
|
"""Custom help formatter to configure ordering of help text."""
|
996
1001
|
|
1002
|
+
# rich-argparse formats all group names with str.title().
|
1003
|
+
# Override their formatter to do nothing.
|
1004
|
+
group_name_formatter: ClassVar[Callable[[str], str]] = str
|
1005
|
+
|
1006
|
+
# Disable automatic highlighting in the help text.
|
1007
|
+
highlights: ClassVar[list[str]] = []
|
1008
|
+
|
1009
|
+
# Disable markup rendering in usage, help, description, and epilog text.
|
1010
|
+
# cmd2's built-in commands do not escape opening brackets in their help text
|
1011
|
+
# and therefore rely on these settings being False. If you desire to use
|
1012
|
+
# markup in your help text, inherit from Cmd2HelpFormatter and override
|
1013
|
+
# these settings in that child class.
|
1014
|
+
usage_markup: ClassVar[bool] = False
|
1015
|
+
help_markup: ClassVar[bool] = False
|
1016
|
+
text_markup: ClassVar[bool] = False
|
1017
|
+
|
997
1018
|
def _format_usage(
|
998
1019
|
self,
|
999
1020
|
usage: Optional[str],
|
@@ -1215,42 +1236,30 @@ class Cmd2ArgumentParser(argparse.ArgumentParser):
|
|
1215
1236
|
behavior on this parser. If this is None or not present, then cmd2 will use
|
1216
1237
|
argparse_completer.DEFAULT_AP_COMPLETER when tab completing this parser's arguments
|
1217
1238
|
"""
|
1239
|
+
kwargs: dict[str, bool] = {}
|
1218
1240
|
if sys.version_info >= (3, 14):
|
1219
1241
|
# Python >= 3.14 so pass new arguments to parent argparse.ArgumentParser class
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
# Python
|
1239
|
-
|
1240
|
-
|
1241
|
-
usage=usage,
|
1242
|
-
description=description,
|
1243
|
-
epilog=epilog,
|
1244
|
-
parents=parents if parents else [],
|
1245
|
-
formatter_class=formatter_class, # type: ignore[arg-type]
|
1246
|
-
prefix_chars=prefix_chars,
|
1247
|
-
fromfile_prefix_chars=fromfile_prefix_chars,
|
1248
|
-
argument_default=argument_default,
|
1249
|
-
conflict_handler=conflict_handler,
|
1250
|
-
add_help=add_help,
|
1251
|
-
allow_abbrev=allow_abbrev,
|
1252
|
-
exit_on_error=exit_on_error, # added in Python 3.9
|
1253
|
-
)
|
1242
|
+
kwargs = {
|
1243
|
+
"suggest_on_error": suggest_on_error,
|
1244
|
+
"color": color,
|
1245
|
+
}
|
1246
|
+
|
1247
|
+
super().__init__(
|
1248
|
+
prog=prog,
|
1249
|
+
usage=usage,
|
1250
|
+
description=description,
|
1251
|
+
epilog=epilog,
|
1252
|
+
parents=parents if parents else [],
|
1253
|
+
formatter_class=formatter_class, # type: ignore[arg-type]
|
1254
|
+
prefix_chars=prefix_chars,
|
1255
|
+
fromfile_prefix_chars=fromfile_prefix_chars,
|
1256
|
+
argument_default=argument_default,
|
1257
|
+
conflict_handler=conflict_handler,
|
1258
|
+
add_help=add_help,
|
1259
|
+
allow_abbrev=allow_abbrev,
|
1260
|
+
exit_on_error=exit_on_error, # added in Python 3.9
|
1261
|
+
**kwargs, # added in Python 3.14
|
1262
|
+
)
|
1254
1263
|
|
1255
1264
|
self.set_ap_completer_type(ap_completer_type) # type: ignore[attr-defined]
|
1256
1265
|
|
cmd2/cmd2.py
CHANGED
@@ -42,14 +42,16 @@ import re
|
|
42
42
|
import sys
|
43
43
|
import tempfile
|
44
44
|
import threading
|
45
|
-
from code import
|
46
|
-
InteractiveConsole,
|
47
|
-
)
|
45
|
+
from code import InteractiveConsole
|
48
46
|
from collections import (
|
49
47
|
OrderedDict,
|
50
48
|
namedtuple,
|
51
49
|
)
|
52
|
-
from collections.abc import
|
50
|
+
from collections.abc import (
|
51
|
+
Callable,
|
52
|
+
Iterable,
|
53
|
+
Mapping,
|
54
|
+
)
|
53
55
|
from types import (
|
54
56
|
FrameType,
|
55
57
|
ModuleType,
|
@@ -254,17 +256,11 @@ class _CommandParsers:
|
|
254
256
|
command = command_method.__name__[len(COMMAND_FUNC_PREFIX) :]
|
255
257
|
|
256
258
|
parser_builder = getattr(command_method, constants.CMD_ATTR_ARGPARSER, None)
|
257
|
-
|
258
|
-
parser = self._cmd._build_parser(parent, parser_builder)
|
259
|
-
if parser is None:
|
259
|
+
if parser_builder is None:
|
260
260
|
return None
|
261
261
|
|
262
|
-
|
263
|
-
|
264
|
-
_set_parser_prog,
|
265
|
-
)
|
266
|
-
|
267
|
-
_set_parser_prog(parser, command)
|
262
|
+
parent = self._cmd.find_commandset_for_command(command) or self._cmd
|
263
|
+
parser = self._cmd._build_parser(parent, parser_builder, command)
|
268
264
|
|
269
265
|
# If the description has not been set, then use the method docstring if one exists
|
270
266
|
if parser.description is None and hasattr(command_method, '__wrapped__') and command_method.__wrapped__.__doc__:
|
@@ -758,24 +754,39 @@ class Cmd(cmd.Cmd):
|
|
758
754
|
def _build_parser(
|
759
755
|
self,
|
760
756
|
parent: CommandParent,
|
761
|
-
parser_builder:
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
ClassArgParseBuilder,
|
767
|
-
]
|
757
|
+
parser_builder: Union[
|
758
|
+
argparse.ArgumentParser,
|
759
|
+
Callable[[], argparse.ArgumentParser],
|
760
|
+
StaticArgParseBuilder,
|
761
|
+
ClassArgParseBuilder,
|
768
762
|
],
|
769
|
-
|
770
|
-
|
763
|
+
prog: str,
|
764
|
+
) -> argparse.ArgumentParser:
|
765
|
+
"""Build argument parser for a command/subcommand.
|
766
|
+
|
767
|
+
:param parent: CommandParent object which owns the command using the parser.
|
768
|
+
When parser_builder is a classmethod, this function passes
|
769
|
+
parent's class to it.
|
770
|
+
:param parser_builder: means used to build the parser
|
771
|
+
:param prog: prog value to set in new parser
|
772
|
+
:return: new parser
|
773
|
+
:raises TypeError: if parser_builder is invalid type
|
774
|
+
"""
|
771
775
|
if isinstance(parser_builder, staticmethod):
|
772
776
|
parser = parser_builder.__func__()
|
773
777
|
elif isinstance(parser_builder, classmethod):
|
774
|
-
parser = parser_builder.__func__(parent
|
778
|
+
parser = parser_builder.__func__(parent.__class__)
|
775
779
|
elif callable(parser_builder):
|
776
780
|
parser = parser_builder()
|
777
781
|
elif isinstance(parser_builder, argparse.ArgumentParser):
|
778
782
|
parser = copy.deepcopy(parser_builder)
|
783
|
+
else:
|
784
|
+
raise TypeError(f"Invalid type for parser_builder: {type(parser_builder)}")
|
785
|
+
|
786
|
+
from .decorators import _set_parser_prog
|
787
|
+
|
788
|
+
_set_parser_prog(parser, prog)
|
789
|
+
|
779
790
|
return parser
|
780
791
|
|
781
792
|
def _install_command_function(self, command_func_name: str, command_method: CommandFunc, context: str = '') -> None:
|
@@ -963,12 +974,7 @@ class Cmd(cmd.Cmd):
|
|
963
974
|
|
964
975
|
target_parser = find_subcommand(command_parser, subcommand_names)
|
965
976
|
|
966
|
-
subcmd_parser =
|
967
|
-
from .decorators import (
|
968
|
-
_set_parser_prog,
|
969
|
-
)
|
970
|
-
|
971
|
-
_set_parser_prog(subcmd_parser, f'{command_name} {subcommand_name}')
|
977
|
+
subcmd_parser = self._build_parser(cmdset, subcmd_parser_builder, f'{command_name} {subcommand_name}')
|
972
978
|
if subcmd_parser.description is None and method.__doc__:
|
973
979
|
subcmd_parser.description = strip_doc_annotations(method.__doc__)
|
974
980
|
|
@@ -2610,7 +2616,7 @@ class Cmd(cmd.Cmd):
|
|
2610
2616
|
# caused by certain binary characters having been printed to it.
|
2611
2617
|
import subprocess
|
2612
2618
|
|
2613
|
-
proc = subprocess.Popen(['stty', 'sane']) # noqa:
|
2619
|
+
proc = subprocess.Popen(['stty', 'sane']) # noqa: S607
|
2614
2620
|
proc.communicate()
|
2615
2621
|
|
2616
2622
|
data = plugin.CommandFinalizationData(stop, statement)
|
cmd2/decorators.py
CHANGED
@@ -393,6 +393,14 @@ def with_argparser(
|
|
393
393
|
|
394
394
|
command_name = func.__name__[len(constants.COMMAND_FUNC_PREFIX) :]
|
395
395
|
|
396
|
+
if isinstance(parser, argparse.ArgumentParser):
|
397
|
+
# Set parser's prog value for backward compatibility within the cmd2 2.0 family.
|
398
|
+
# This will be removed in cmd2 3.0 since we never reference this parser object's prog value.
|
399
|
+
# Since it's possible for the same parser object to be passed into multiple with_argparser()
|
400
|
+
# calls, we only set prog on the deep copies of this parser based on the specific do_xxxx
|
401
|
+
# instance method they are associated with.
|
402
|
+
_set_parser_prog(parser, command_name)
|
403
|
+
|
396
404
|
# Set some custom attributes for this command
|
397
405
|
setattr(cmd_wrapper, constants.CMD_ATTR_ARGPARSER, parser)
|
398
406
|
setattr(cmd_wrapper, constants.CMD_ATTR_PRESERVE_QUOTES, preserve_quotes)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cmd2
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.7.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: The MIT License (MIT)
|
7
7
|
|
8
|
-
Copyright (c) 2008-
|
8
|
+
Copyright (c) 2008-2025 Catherine Devlin and others
|
9
9
|
|
10
10
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
11
11
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -39,6 +39,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.12
|
40
40
|
Classifier: Programming Language :: Python :: 3.13
|
41
41
|
Classifier: Programming Language :: Python :: 3.14
|
42
|
+
Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
|
42
43
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
43
44
|
Requires-Python: >=3.9
|
44
45
|
Description-Content-Type: text/markdown
|
@@ -46,6 +47,7 @@ License-File: LICENSE
|
|
46
47
|
Requires-Dist: gnureadline>=8; platform_system == "Darwin"
|
47
48
|
Requires-Dist: pyperclip>=1.8
|
48
49
|
Requires-Dist: pyreadline3>=3.4; platform_system == "Windows"
|
50
|
+
Requires-Dist: rich-argparse>=1.7.1
|
49
51
|
Requires-Dist: wcwidth>=0.2.10
|
50
52
|
Dynamic: license-file
|
51
53
|
|
@@ -80,22 +82,22 @@ when using cmd.
|
|
80
82
|
|
81
83
|

|
82
84
|
|
83
|
-
When creating solutions developers have no shortage of tools to create rich and smart user
|
84
|
-
System administrators have long been duct taping together brittle workflows based on a
|
85
|
-
tools created by strangers on github and the guy down the hall.
|
86
|
-
Unfortunately, when CLIs become significantly complex the ease of command discoverability tends to
|
87
|
-
On the other hand, Web and traditional desktop GUIs are first in class when it comes
|
88
|
-
functionality.
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
85
|
+
When creating solutions developers have no shortage of tools to create rich and smart user
|
86
|
+
interfaces. System administrators have long been duct taping together brittle workflows based on a
|
87
|
+
menagerie of simple command line tools created by strangers on github and the guy down the hall.
|
88
|
+
Unfortunately, when CLIs become significantly complex the ease of command discoverability tends to
|
89
|
+
fade quickly. On the other hand, Web and traditional desktop GUIs are first in class when it comes
|
90
|
+
to easily discovering functionality. The price we pay for beautifully colored displays is complexity
|
91
|
+
required to aggregate disperate applications into larger systems. `cmd2` fills the niche between
|
92
|
+
high [ease of command discovery](https://clig.dev/#ease-of-discovery) applications and smart
|
93
|
+
workflow automation systems.
|
94
|
+
|
95
|
+
The `cmd2` framework provides a great mixture of both worlds. Application designers can easily
|
96
|
+
create complex applications and rely on the cmd2 library to offer effortless user facing help and
|
97
|
+
extensive tab completion. When users become comfortable with functionality, cmd2 turns into a
|
98
|
+
feature rich library enabling a smooth transition to full automation. If designed with enough
|
99
|
+
forethought, a well implemented cmd2 application can serve as a boutique workflow tool. `cmd2` pulls
|
100
|
+
off this flexibility based on two pillars of philosophy:
|
99
101
|
|
100
102
|
- Tab Completion
|
101
103
|
- Automation Transition
|
@@ -104,8 +106,8 @@ workflow tool. `cmd2` pulls off this flexibility based on two pillars of philoso
|
|
104
106
|
|
105
107
|
<a href="https://imgflip.com/i/63h03x"><img src="https://i.imgflip.com/63h03x.jpg" title="made at imgflip.com" width="70%" height="%70"/></a>
|
106
108
|
|
107
|
-
Deep extensive tab completion and help text generation based on the argparse library create the
|
108
|
-
command discovery'. The following is a list of features in this category.
|
109
|
+
Deep extensive tab completion and help text generation based on the argparse library create the
|
110
|
+
first pillar of 'ease of command discovery'. The following is a list of features in this category.
|
109
111
|
|
110
112
|
- Great tab completion of commands, subcommands, file system paths, and shell commands.
|
111
113
|
- Custom tab completion for user designed commands via simple function overloading.
|
@@ -116,13 +118,15 @@ command discovery'. The following is a list of features in this category.
|
|
116
118
|
|
117
119
|
<a href="https://imgflip.com/i/66t0y0"><img src="https://i.imgflip.com/66t0y0.jpg" title="made at imgflip.com" width="70%" height="70%"/></a>
|
118
120
|
|
119
|
-
cmd2 creates the second pillar of 'ease of transition to automation' through alias/macro creation,
|
120
|
-
parsing and execution of cmd2 scripting.
|
121
|
+
cmd2 creates the second pillar of 'ease of transition to automation' through alias/macro creation,
|
122
|
+
command line argument parsing and execution of cmd2 scripting.
|
121
123
|
|
122
124
|
- Flexible alias and macro creation for quick abstraction of commands.
|
123
125
|
- Text file scripting of your application with `run_script` (`@`) and `_relative_run_script` (`@@`)
|
124
|
-
- Powerful and flexible built-in Python scripting of your application using the `run_pyscript`
|
125
|
-
|
126
|
+
- Powerful and flexible built-in Python scripting of your application using the `run_pyscript`
|
127
|
+
command
|
128
|
+
- Transcripts for use with built-in regression can be automatically generated from `history -t` or
|
129
|
+
`run_script -t`
|
126
130
|
|
127
131
|
## Installation
|
128
132
|
|
@@ -132,11 +136,12 @@ On all operating systems, the latest stable version of `cmd2` can be installed u
|
|
132
136
|
pip install -U cmd2
|
133
137
|
```
|
134
138
|
|
135
|
-
cmd2 works with Python 3.9+ on Windows, macOS, and Linux. It is pure Python code with few 3rd-party
|
139
|
+
cmd2 works with Python 3.9+ on Windows, macOS, and Linux. It is pure Python code with few 3rd-party
|
140
|
+
dependencies. It works with both conventional CPython and free-threaded variants.
|
136
141
|
|
137
142
|
For information on other installation options, see
|
138
|
-
[Installation Instructions](https://cmd2.readthedocs.io/en/latest/overview/installation.html) in the
|
139
|
-
documentation.
|
143
|
+
[Installation Instructions](https://cmd2.readthedocs.io/en/latest/overview/installation.html) in the
|
144
|
+
cmd2 documentation.
|
140
145
|
|
141
146
|
## Documentation
|
142
147
|
|
@@ -144,7 +149,8 @@ The latest documentation for cmd2 can be read online here: https://cmd2.readthed
|
|
144
149
|
|
145
150
|
It is available in HTML, PDF, and ePub formats.
|
146
151
|
|
147
|
-
The best way to learn the cmd2 api is to delve into the example applications located in source under
|
152
|
+
The best way to learn the cmd2 api is to delve into the example applications located in source under
|
153
|
+
examples.
|
148
154
|
|
149
155
|
## Tutorials
|
150
156
|
|
@@ -153,13 +159,15 @@ The best way to learn the cmd2 api is to delve into the example applications loc
|
|
153
159
|
- [slides](https://github.com/python-cmd2/talks/blob/master/PyOhio_2019/cmd2-PyOhio_2019.pdf)
|
154
160
|
- [example code](https://github.com/python-cmd2/talks/tree/master/PyOhio_2019/examples)
|
155
161
|
- [Cookiecutter](https://github.com/cookiecutter/cookiecutter) Templates from community
|
156
|
-
- Basic cookiecutter template for cmd2 application :
|
157
|
-
|
158
|
-
|
162
|
+
- Basic cookiecutter template for cmd2 application :
|
163
|
+
https://github.com/jayrod/cookiecutter-python-cmd2
|
164
|
+
- Advanced cookiecutter template with external plugin support :
|
165
|
+
https://github.com/jayrod/cookiecutter-python-cmd2-ext-plug
|
159
166
|
- [cmd2 example applications](https://github.com/python-cmd2/cmd2/tree/master/examples)
|
160
167
|
- Basic cmd2 examples to demonstrate how to use various features
|
161
168
|
- [Advanced Examples](https://github.com/jayrod/cmd2-example-apps)
|
162
|
-
- More complex examples that demonstrate more featuers about how to put together a complete
|
169
|
+
- More complex examples that demonstrate more featuers about how to put together a complete
|
170
|
+
application
|
163
171
|
|
164
172
|
## Hello World
|
165
173
|
|
@@ -187,10 +195,10 @@ if __name__ == '__main__':
|
|
187
195
|
|
188
196
|
## Found a bug?
|
189
197
|
|
190
|
-
If you think you've found a bug, please first read through the
|
191
|
-
|
192
|
-
GitHub issue. Be sure to include as much information as possible so we can
|
193
|
-
the following:
|
198
|
+
If you think you've found a bug, please first read through the open
|
199
|
+
[Issues](https://github.com/python-cmd2/cmd2/issues). If you're confident it's a new bug, go ahead
|
200
|
+
and create a new GitHub issue. Be sure to include as much information as possible so we can
|
201
|
+
reproduce the bug. At a minimum, please state the following:
|
194
202
|
|
195
203
|
- `cmd2` version
|
196
204
|
- Python version
|
@@ -232,4 +240,5 @@ Possibly defunct but still good examples
|
|
232
240
|
| [FLASHMINGO](https://github.com/mandiant/flashmingo) | Automatic analysis of SWF files based on some heuristics. Extensible via plugins. | [Mandiant](https://github.com/mandiant) |
|
233
241
|
| [psiTurk](https://github.com/NYUCCL/psiTurk) | An open platform for science on Amazon Mechanical Turk | [NYU Computation and Cognition Lab](https://github.com/NYUCCL) |
|
234
242
|
|
235
|
-
Note: If you have created an application based on `cmd2` that you would like us to mention here,
|
243
|
+
Note: If you have created an application based on `cmd2` that you would like us to mention here,
|
244
|
+
please get in touch.
|
@@ -1,12 +1,12 @@
|
|
1
1
|
cmd2/__init__.py,sha256=xRXcr4HzJrZbouMEP8AkWwxjW1lqXYLFG0SlWiw5_9g,2502
|
2
2
|
cmd2/ansi.py,sha256=XwBvFnB51LYYjIpfEge6mcr5X63dUxiV0aJlOOJ_2tQ,31965
|
3
3
|
cmd2/argparse_completer.py,sha256=F_5hiX9fYpEhV42mz7v7qeS7KuInAS6xU6KekLxYzsQ,35863
|
4
|
-
cmd2/argparse_custom.py,sha256=
|
4
|
+
cmd2/argparse_custom.py,sha256=uGCQ3MG_iTBvwZ6MKmZOoCjlgF8OvWJg2DMs2myHZf4,59201
|
5
5
|
cmd2/clipboard.py,sha256=HLZWY-W3mkpF_OqQet-F8pS3rlXpiE5vxUyPV_yHvIU,507
|
6
|
-
cmd2/cmd2.py,sha256=
|
6
|
+
cmd2/cmd2.py,sha256=8HKnMWhtY0qJUtQZr0ByrMnfYKnavQu7tT6G7wrsZVk,261697
|
7
7
|
cmd2/command_definition.py,sha256=_wF39nig5MP0grSOZ1hFehP5fCGusUNHMn9PIs6pmcU,7648
|
8
8
|
cmd2/constants.py,sha256=duEqGhhvdUV7AYxE8VGZ4wyFBcN2y2bLPd5iefW4tSU,1943
|
9
|
-
cmd2/decorators.py,sha256=
|
9
|
+
cmd2/decorators.py,sha256=t0gBy3aRz5ke0jHyP5YOszdQ61t5aV8j0eNyLPX6hmg,20644
|
10
10
|
cmd2/exceptions.py,sha256=fYciAnLCpvPYkXCtmADhxtcvjbxVagRjhp41eYwAQo8,3444
|
11
11
|
cmd2/history.py,sha256=elJPuvV7BnUEgpWnixNyl2yGtR6sz3nwvpyFwaeFqRA,14800
|
12
12
|
cmd2/parsing.py,sha256=BsyQTTkuEg4FiQP9o2O28KjXodFgXkXmvk_VkAe-Ryw,28057
|
@@ -17,8 +17,8 @@ cmd2/rl_utils.py,sha256=sWapqwDR_GvOgy5NJ7c-i6nUU4dqpKpGQ8-Olwi3tuU,11335
|
|
17
17
|
cmd2/table_creator.py,sha256=nF3VEgGHvfhHBh_yoMAiV1WaDdR8hIareIAogzIPq5M,47177
|
18
18
|
cmd2/transcript.py,sha256=Ws0lW_oBFxCQCKSwvnDUS1x3ya163YXnV-O5aTU0z7k,9207
|
19
19
|
cmd2/utils.py,sha256=NqDIkY4LiAlnv_Un7MFHxszoH2KgEWQ7NJOwQurIn_E,50698
|
20
|
-
cmd2-2.
|
21
|
-
cmd2-2.
|
22
|
-
cmd2-2.
|
23
|
-
cmd2-2.
|
24
|
-
cmd2-2.
|
20
|
+
cmd2-2.7.0.dist-info/licenses/LICENSE,sha256=9qPeHY4u2fkSz0JQGT-P4T3QqTWTqnQJ_8LkZUhSdFY,1099
|
21
|
+
cmd2-2.7.0.dist-info/METADATA,sha256=HOqT-x9vnZ21-fCTSbT7HC-BQo6fPY1hyCXtS_b6GHw,17328
|
22
|
+
cmd2-2.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
23
|
+
cmd2-2.7.0.dist-info/top_level.txt,sha256=gJbOJmyrARwLhm5diXAtzlNQdxbDZ8iRJ8HJi65_5hg,5
|
24
|
+
cmd2-2.7.0.dist-info/RECORD,,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2008-
|
3
|
+
Copyright (c) 2008-2025 Catherine Devlin and others
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
File without changes
|
File without changes
|