summaryrefslogtreecommitdiffstats
path: root/ipalib/cli.py
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2011-12-21 14:44:58 +0100
committerMartin Kosek <mkosek@redhat.com>2012-01-12 09:43:13 +0100
commit2188dae0c91712015cd5947fc9d61597ec2e95fa (patch)
treece7f033e5d03e4bfb99699a62f077bbab86e3249 /ipalib/cli.py
parent1f36ab1b780f488869f2880b79a3127840438cc9 (diff)
downloadfreeipa-2188dae0c91712015cd5947fc9d61597ec2e95fa.tar.gz
freeipa-2188dae0c91712015cd5947fc9d61597ec2e95fa.tar.xz
freeipa-2188dae0c91712015cd5947fc9d61597ec2e95fa.zip
Improve CLI output for complex commands
Complex commands may have many options or non-standard output. This patch adds 2 improvements to handle these commands better: 1) Add "option_group" parameter attribute Make command help more readable by specifying an option group for the parameter. All parameters in the same option group are then placed to one named option group 2) Allow nested entries in the output Current CLI output module cannot handle a list of nested entries (dictionaries) contained in an entry attribute. Make sure they are printed properly (with indentation) https://fedorahosted.org/freeipa/ticket/2082
Diffstat (limited to 'ipalib/cli.py')
-rw-r--r--ipalib/cli.py27
1 files changed, 23 insertions, 4 deletions
diff --git a/ipalib/cli.py b/ipalib/cli.py
index 7d79775ef..667a7cdc4 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -375,9 +375,16 @@ class textui(backend.Backend):
indent=indent+1
)
else:
- self.print_attribute(
- label, value, format, indent, one_value_per_line
- )
+ if isinstance(value, (list, tuple)) and \
+ all(isinstance(val, dict) for val in value):
+ # this is a list of entries (dicts), not values
+ self.print_attribute(label, u'', format, indent)
+ self.print_entries(value, order, labels, flags, print_all,
+ format, indent+1)
+ else:
+ self.print_attribute(
+ label, value, format, indent, one_value_per_line
+ )
del entry[key]
if print_all:
for key in sorted(entry):
@@ -1002,6 +1009,7 @@ class cli(backend.Executioner):
parser = optparse.OptionParser(
usage=' '.join(self.usage_iter(cmd))
)
+ option_groups = {}
for option in cmd.options():
kw = dict(
dest=option.name,
@@ -1025,7 +1033,18 @@ class cli(backend.Executioner):
o = optparse.make_option('-%s' % option.cli_short_name, '--%s' % to_cli(option.cli_name), **kw)
else:
o = optparse.make_option('--%s' % to_cli(option.cli_name), **kw)
- parser.add_option(o)
+
+ if option.option_group is not None:
+ option_group = option_groups.get(option.option_group)
+ if option_group is None:
+ option_group = optparse.OptionGroup(parser,
+ option.option_group)
+ parser.add_option_group(option_group)
+ option_groups[option.option_group] = option_group
+
+ option_group.add_option(o)
+ else:
+ parser.add_option(o)
return parser
def usage_iter(self, cmd):