diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/submenus.py | 90 |
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() + |