Display full command documentation in online help

ipa <command> -h only showed the summary string, not the full help.
Use the full docstring. Add a custom help formatter that disables
optparse's reformatting.

Test included

https://fedorahosted.org/freeipa/ticket/3543
This commit is contained in:
Petr Viktorin 2013-04-03 10:40:30 +02:00 committed by Martin Kosek
parent f770556946
commit 4a30bf55ac
2 changed files with 28 additions and 1 deletions

View File

@ -1098,7 +1098,8 @@ class cli(backend.Executioner):
def build_parser(self, cmd):
parser = CLIOptionParser(
usage=' '.join(self.usage_iter(cmd)),
description=cmd.summary,
description=unicode(cmd.doc),
formatter=IPAHelpFormatter(),
)
option_groups = {}
for option in cmd.options():
@ -1257,6 +1258,21 @@ class cli(backend.Executioner):
kw[p.name] = self.Backend.textui.decode(raw)
class IPAHelpFormatter(optparse.IndentedHelpFormatter):
"""Formatter suitable for printing IPA command help
The default help formatter reflows text to fit the terminal, but it
ignores line/paragraph breaks.
IPA's descriptions already have correct line breaks. This formatter
doesn't touch them (save for removing initial/trailing whitespace).
"""
def format_description(self, description):
if description:
return description.strip()
else:
return ""
cli_plugins = (
cli,
textui,

View File

@ -128,3 +128,14 @@ def test_ambiguous_command_or_topic():
assert h_ctx.stderr == ''
assert h_ctx.stdout != help_ctx.stdout
def test_multiline_description():
"""Test that all of a multi-line command description appears in output
"""
# This assumes trust_add has multiline doc. Ensure it is so.
assert '\n\n' in unicode(api.Command.trust_add.doc).strip()
with CLITestContext(exception=SystemExit) as help_ctx:
return_value = api.Backend.cli.run(['trust-add', '-h'])
assert unicode(api.Command.trust_add.doc).strip() in help_ctx.stdout