1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#!/usr/bin/env python
# coding=utf-8
"""A simple example demonstrating how to use flag and index based tab-completion functions
"""
import argparse
import cmd2
# List of strings used with flag and index based completion functions
food_item_strs = ['Pizza', 'Ham', 'Ham Sandwich', 'Potato']
sport_item_strs = ['Bat', 'Basket', 'Basketball', 'Football', 'Space Ball']
class TabCompleteExample(cmd2.Cmd):
""" Example cmd2 application where we a base command which has a couple subcommands."""
def __init__(self):
super().__init__()
add_item_parser = argparse.ArgumentParser()
add_item_group = add_item_parser.add_mutually_exclusive_group()
add_item_group.add_argument('-f', '--food', help='Adds food item')
add_item_group.add_argument('-s', '--sport', help='Adds sport item')
add_item_group.add_argument('-o', '--other', help='Adds other item')
@cmd2.with_argparser(add_item_parser)
def do_add_item(self, args):
"""Add item command help"""
if args.food:
add_item = args.food
elif args.sport:
add_item = args.sport
elif args.other:
add_item = args.other
else:
add_item = 'no items'
self.poutput("You added {}".format(add_item))
# Add flag-based tab-completion to add_item command
def complete_add_item(self, text, line, begidx, endidx):
flag_dict = \
{
# Tab-complete food items after -f and --food flags in command line
'-f': food_item_strs,
'--food': food_item_strs,
# Tab-complete sport items after -s and --sport flags in command line
'-s': sport_item_strs,
'--sport': sport_item_strs,
# Tab-complete using path_complete function after -o and --other flags in command line
'-o': self.path_complete,
'--other': self.path_complete,
}
return self.flag_based_complete(text, line, begidx, endidx, flag_dict=flag_dict)
@cmd2.with_argument_list
def do_list_item(self, args):
"""List item command help"""
self.poutput("You listed {}".format(args))
# Add index-based tab-completion to list_item command
def complete_list_item(self, text, line, begidx, endidx):
index_dict = \
{
1: food_item_strs, # Tab-complete food items at index 1 in command line
2: sport_item_strs, # Tab-complete sport items at index 2 in command line
3: self.path_complete, # Tab-complete using path_complete function at index 3 in command line
}
return self.index_based_complete(text, line, begidx, endidx, index_dict=index_dict)
if __name__ == '__main__':
app = TabCompleteExample()
app.cmdloop()
|