diff --git a/cliff/command.py b/cliff/command.py index ae66e0e..6a4af11 100644 --- a/cliff/command.py +++ b/cliff/command.py @@ -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): diff --git a/cliff/hooks.py b/cliff/hooks.py index e8a804a..b41cef1 100644 --- a/cliff/hooks.py +++ b/cliff/hooks.py @@ -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 '' diff --git a/cliff/tests/test_command_hooks.py b/cliff/tests/test_command_hooks.py index bacc3eb..bb69d11 100644 --- a/cliff/tests/test_command_hooks.py +++ b/cliff/tests/test_command_hooks.py @@ -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) diff --git a/demoapp/cliffdemo/hook.py b/demoapp/cliffdemo/hook.py index 09c546c..405ff33 100644 --- a/demoapp/cliffdemo/hook.py +++ b/demoapp/cliffdemo/hook.py @@ -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' diff --git a/doc/source/user/demoapp.rst b/doc/source/user/demoapp.rst index 0edcdbf..35e2586 100644 --- a/doc/source/user/demoapp.rst +++ b/doc/source/user/demoapp.rst @@ -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.