summaryrefslogtreecommitdiff
path: root/examples/dynamic_commands.py
diff options
context:
space:
mode:
authorTodd Leonhardt <todd.leonhardt@gmail.com>2020-01-09 22:45:53 -0500
committerTodd Leonhardt <todd.leonhardt@gmail.com>2020-01-09 22:45:53 -0500
commit591bd29cb4a3bcb9b1f40ffc1f30429c6501ebdb (patch)
tree46c1e3af762c9cb222c6ae90bf0446d6eca4b388 /examples/dynamic_commands.py
parent10b844809e3a9500274dc4af4e780708975ba905 (diff)
parentd4556962799e68ea4d54ff86186428d17edcaef9 (diff)
downloadcmd2-git-591bd29cb4a3bcb9b1f40ffc1f30429c6501ebdb.tar.gz
Merge branch 'master' into generating_output_docs
# Conflicts: # docs/features/generating_output.rst # docs/features/settings.rst
Diffstat (limited to 'examples/dynamic_commands.py')
-rwxr-xr-xexamples/dynamic_commands.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/examples/dynamic_commands.py b/examples/dynamic_commands.py
index 69816d40..620acb7f 100755
--- a/examples/dynamic_commands.py
+++ b/examples/dynamic_commands.py
@@ -3,13 +3,32 @@
"""A simple example demonstrating how do_* commands can be created in a loop.
"""
import functools
+
import cmd2
-COMMAND_LIST = ['foo', 'bar', 'baz']
+from cmd2.constants import COMMAND_FUNC_PREFIX, HELP_FUNC_PREFIX
+
+COMMAND_LIST = ['foo', 'bar']
+CATEGORY = 'Dynamic Commands'
class CommandsInLoop(cmd2.Cmd):
"""Example of dynamically adding do_* commands."""
def __init__(self):
+ # Add dynamic commands before calling cmd2.Cmd's init since it validates command names
+ for command in COMMAND_LIST:
+ # Create command function and add help category to it
+ cmd_func = functools.partial(self.send_text, text=command)
+ cmd2.categorize(cmd_func, CATEGORY)
+
+ # Add command function to CLI object
+ cmd_func_name = COMMAND_FUNC_PREFIX + command
+ setattr(self, cmd_func_name, cmd_func)
+
+ # Add help function to CLI object
+ help_func = functools.partial(self.text_help, text=command)
+ help_func_name = HELP_FUNC_PREFIX + command
+ setattr(self, help_func_name, help_func)
+
super().__init__(use_ipython=True)
def send_text(self, args: cmd2.Statement, *, text: str):
@@ -21,11 +40,6 @@ class CommandsInLoop(cmd2.Cmd):
self.poutput("Simulate sending {!r} to a server and printing the response".format(text))
-for command in COMMAND_LIST:
- setattr(CommandsInLoop, 'do_{}'.format(command), functools.partialmethod(CommandsInLoop.send_text, text=command))
- setattr(CommandsInLoop, 'help_{}'.format(command), functools.partialmethod(CommandsInLoop.text_help, text=command))
-
-
if __name__ == '__main__':
app = CommandsInLoop()
app.cmdloop()