add hook for get_epilog

Change-Id: If3fe077522c156472a0213e8768470e0505c189d
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann 2017-05-25 18:52:31 -04:00
parent e72e54e757
commit 45de8e45ef
5 changed files with 29 additions and 2 deletions

View File

@ -89,6 +89,16 @@ class Command(object):
def get_epilog(self):
"""Return the command epilog."""
hook_epilogs = filter(
None,
(h.obj.get_epilog() for h in self._hooks),
)
if hook_epilogs:
# combine them, replacing a None in self._epilog with an
# empty string
parts = [self._epilog or '']
parts.extend(hook_epilogs)
return '\n\n'.join(parts)
return self._epilog
def get_parser(self, prog_name):

View File

@ -36,3 +36,8 @@ class CommandHook(object):
:returns: ArgumentParser
"""
return parser
@abc.abstractmethod
def get_epilog(self):
"Return text to add to the command help epilog."
return ''

View File

@ -66,6 +66,9 @@ class TestHook(hooks.CommandHook):
parser.add_argument('--added-by-hook')
return parser
def get_epilog(self):
return 'hook epilog'
class TestCommandLoadHooks(base.TestBase):
@ -83,10 +86,10 @@ class TestCommandLoadHooks(base.TestBase):
self.assertEqual('cliff.tests.test', kwargs['namespace'])
class TestParserHook(base.TestBase):
class TestHooks(base.TestBase):
def setUp(self):
super(TestParserHook, self).setUp()
super(TestHooks, self).setUp()
self.app = make_app()
self.cmd = TestCommand(self.app, None, cmd_name='test')
self.hook = TestHook(self.cmd)
@ -105,3 +108,7 @@ class TestParserHook(base.TestBase):
parser = self.cmd.get_parser('test')
results = parser.parse_args(['--added-by-hook', 'value'])
self.assertEqual(results.added_by_hook, 'value')
def test_get_epilog(self):
results = self.cmd.get_epilog()
self.assertIn('hook epilog', results)

View File

@ -39,3 +39,6 @@ class Hook(CommandHook):
print('sample hook get_parser()')
parser.add_argument('--added-by-hook')
return parser
def get_epilog(self):
return 'extension epilog text'

View File

@ -293,6 +293,8 @@ single ``--added-by-hook`` option.
-h, --help show this help message and exit
--added-by-hook ADDED_BY_HOOK
extension epilog text
.. seealso::
:class:`cliff.hooks.CommandHook` -- The API for command hooks.