summaryrefslogtreecommitdiff
path: root/examples/submenus.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/submenus.py')
-rw-r--r--examples/submenus.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/examples/submenus.py b/examples/submenus.py
new file mode 100644
index 00000000..39512ba7
--- /dev/null
+++ b/examples/submenus.py
@@ -0,0 +1,90 @@
+"""
+Create a CLI with a nested command structure as follows. The commands 'second' and 'third' navigate the CLI to the scope
+of the submenu. Nesting of the submenus is done with the cmd2.AddSubmenu() decorator.
+
+ (Top Level)----second----->(2nd Level)----third----->(3rd Level)
+ | | |
+ ---> say ---> say ---> say
+
+
+
+"""
+
+from __future__ import print_function
+import cmd2
+
+
+class ThirdLevel(cmd2.Cmd):
+ """To be used as a third level command class. """
+
+ def __init__(self, *args, **kwargs):
+ cmd2.Cmd.__init__(self, *args, **kwargs)
+ self.prompt = '3rdLevel '
+ self.top_level_attr = None
+ self.second_level_attr = None
+
+ def do_say(self, line):
+ print("You called a command in ThirdLevel with '%s'. "
+ "It has access to second_level_attr: %s "
+ "and second_level_attr: %s" % (line, self.top_level_attr, self.second_level_attr))
+
+ def help_say(self):
+ print("This is a third level submenu (submenu_ab). Options are qwe, asd, zxc")
+
+ def complete_say(self, text, line, begidx, endidx):
+ return [s for s in ['qwe', 'asd', 'zxc'] if s.startswith(text)]
+
+
+@cmd2.AddSubmenu(ThirdLevel(),
+ command='third',
+ aliases=('third_alias',),
+ shared_attributes=dict(second_level_attr='second_level_attr', top_level_attr='top_level_attr'))
+class SecondLevel(cmd2.Cmd):
+ """To be used as a second level command class. """
+ def __init__(self, *args, **kwargs):
+ cmd2.Cmd.__init__(self, *args, **kwargs)
+ self.prompt = '2ndLevel '
+ self.top_level_attr = None
+ self.second_level_attr = 987654321
+
+ def do_say(self, line):
+ print("You called a command in SecondLevel with '%s'. "
+ "It has access to top_level_attr: %s" % (line, self.top_level_attr))
+
+ def help_say(self):
+ print("This is a SecondLevel menu. Options are qwe, asd, zxc")
+
+ def complete_say(self, text, line, begidx, endidx):
+ return [s for s in ['qwe', 'asd', 'zxc'] if s.startswith(text)]
+
+
+
+@cmd2.AddSubmenu(SecondLevel(),
+ command='second',
+ aliases=('second_alias',),
+ shared_attributes=dict(top_level_attr='top_level_attr'))
+class TopLevel(cmd2.Cmd):
+ """To be used as the main / top level command class that will contain other submenus."""
+
+ def __init__(self, *args, **kwargs):
+ cmd2.Cmd.__init__(self, *args, **kwargs)
+ self.prompt = 'TopLevel '
+ self.top_level_attr = 123456789
+
+ def do_say(self, line):
+ print("You called a command in TopLevel with '%s'. "
+ "TopLevel has attribute top_level_attr=%s" % (line, self.top_level_attr))
+
+ def help_say(self):
+ print("This is a top level submenu. Options are qwe, asd, zxc")
+
+ def complete_say(self, text, line, begidx, endidx):
+ return [s for s in ['qwe', 'asd', 'zxc'] if s.startswith(text)]
+
+
+
+if __name__ == '__main__':
+
+ root = TopLevel()
+ root.cmdloop()
+