use rawformatter and add epilog
This commit is contained in:
parent
b0849ab260
commit
d8ee3486e9
2 changed files with 80 additions and 3 deletions
74
test/test_help.py
Normal file
74
test/test_help.py
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
from io import StringIO
|
||||||
|
from contextlib import redirect_stdout, redirect_stderr
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
from tiramisu_cmdline_parser import TiramisuCmdlineParser
|
||||||
|
from tiramisu import IntOption, StrOption, BoolOption, ChoiceOption, \
|
||||||
|
SymLinkOption, OptionDescription, Config
|
||||||
|
from tiramisu_json_api import Config as JsonConfig
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_config(json):
|
||||||
|
choiceoption = ChoiceOption('cmd',
|
||||||
|
'choice the sub argument',
|
||||||
|
('str', 'list', 'int', 'none'),
|
||||||
|
properties=('mandatory',
|
||||||
|
'positional'))
|
||||||
|
od = OptionDescription('od',
|
||||||
|
'od',
|
||||||
|
[choiceoption])
|
||||||
|
root = OptionDescription('root',
|
||||||
|
'root',
|
||||||
|
[od])
|
||||||
|
config = Config(root)
|
||||||
|
config.property.read_write()
|
||||||
|
if json == 'tiramisu':
|
||||||
|
return config
|
||||||
|
jconfig = JsonConfig(config.option.dict())
|
||||||
|
return jconfig
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(params=['tiramisu', 'tiramisu-json'])
|
||||||
|
def json(request):
|
||||||
|
return request.param
|
||||||
|
|
||||||
|
|
||||||
|
def test_help(json):
|
||||||
|
output = """usage: prog.py [-h] {str,list,int,none}
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
|
||||||
|
od:
|
||||||
|
od
|
||||||
|
|
||||||
|
{str,list,int,none} choice the sub argument
|
||||||
|
"""
|
||||||
|
parser = TiramisuCmdlineParser(get_config(json), 'prog.py')
|
||||||
|
f = StringIO()
|
||||||
|
with redirect_stdout(f):
|
||||||
|
parser.print_help()
|
||||||
|
assert f.getvalue() == output
|
||||||
|
|
||||||
|
|
||||||
|
def test_help_epilog(json):
|
||||||
|
output = """usage: prog.py [-h] {str,list,int,none}
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
|
||||||
|
od:
|
||||||
|
od
|
||||||
|
|
||||||
|
{str,list,int,none} choice the sub argument
|
||||||
|
|
||||||
|
two
|
||||||
|
line
|
||||||
|
"""
|
||||||
|
parser = TiramisuCmdlineParser(get_config(json), 'prog.py', epilog="\ntwo\nline")
|
||||||
|
f = StringIO()
|
||||||
|
with redirect_stdout(f):
|
||||||
|
parser.print_help()
|
||||||
|
assert f.getvalue() == output
|
|
@ -13,7 +13,7 @@
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
from typing import Union, List, Dict, Tuple, Optional, Any
|
from typing import Union, List, Dict, Tuple, Optional, Any
|
||||||
from argparse import ArgumentParser, Namespace, SUPPRESS, _HelpAction, HelpFormatter
|
from argparse import ArgumentParser, Namespace, SUPPRESS, _HelpAction, RawDescriptionHelpFormatter
|
||||||
from copy import copy
|
from copy import copy
|
||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ class TiramisuNamespace(Namespace):
|
||||||
self._config.option(true_key, index).value.set(value)
|
self._config.option(true_key, index).value.set(value)
|
||||||
|
|
||||||
|
|
||||||
class TiramisuHelpFormatter(HelpFormatter):
|
class TiramisuHelpFormatter(RawDescriptionHelpFormatter):
|
||||||
def _get_default_metavar_for_optional(self,
|
def _get_default_metavar_for_optional(self,
|
||||||
action):
|
action):
|
||||||
ret = super()._get_default_metavar_for_optional(action)
|
ret = super()._get_default_metavar_for_optional(action)
|
||||||
|
@ -114,7 +114,7 @@ class TiramisuHelpFormatter(HelpFormatter):
|
||||||
ret = ret.rsplit('.', 1)[1]
|
ret = ret.rsplit('.', 1)[1]
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
class _Section(HelpFormatter._Section):
|
class _Section(RawDescriptionHelpFormatter._Section):
|
||||||
def format_help(self):
|
def format_help(self):
|
||||||
# Remove empty OD
|
# Remove empty OD
|
||||||
if self.formatter.remove_empty_od and \
|
if self.formatter.remove_empty_od and \
|
||||||
|
@ -272,6 +272,7 @@ class TiramisuCmdlineParser(ArgumentParser):
|
||||||
root=self.root,
|
root=self.root,
|
||||||
remove_empty_od=self.remove_empty_od,
|
remove_empty_od=self.remove_empty_od,
|
||||||
remove_empty_description_od=self.remove_empty_description_od,
|
remove_empty_description_od=self.remove_empty_description_od,
|
||||||
|
epilog=self.epilog,
|
||||||
fullpath=self.fullpath)
|
fullpath=self.fullpath)
|
||||||
namespace_, args_ = new_parser._parse_known_args(args_, namespace)
|
namespace_, args_ = new_parser._parse_known_args(args_, namespace)
|
||||||
else:
|
else:
|
||||||
|
@ -509,6 +510,7 @@ class TiramisuCmdlineParser(ArgumentParser):
|
||||||
fullpath=self.fullpath,
|
fullpath=self.fullpath,
|
||||||
remove_empty_od=self.remove_empty_od,
|
remove_empty_od=self.remove_empty_od,
|
||||||
remove_empty_description_od=self.remove_empty_description_od,
|
remove_empty_description_od=self.remove_empty_description_od,
|
||||||
|
epilog=self.epilog,
|
||||||
_forhelp=True)
|
_forhelp=True)
|
||||||
return super(TiramisuCmdlineParser, help_formatter).format_usage(*args, **kwargs)
|
return super(TiramisuCmdlineParser, help_formatter).format_usage(*args, **kwargs)
|
||||||
|
|
||||||
|
@ -519,6 +521,7 @@ class TiramisuCmdlineParser(ArgumentParser):
|
||||||
fullpath=self.fullpath,
|
fullpath=self.fullpath,
|
||||||
remove_empty_od=self.remove_empty_od,
|
remove_empty_od=self.remove_empty_od,
|
||||||
remove_empty_description_od=self.remove_empty_description_od,
|
remove_empty_description_od=self.remove_empty_description_od,
|
||||||
|
epilog=self.epilog,
|
||||||
_forhelp=True)
|
_forhelp=True)
|
||||||
return super(TiramisuCmdlineParser, help_formatter).format_help()
|
return super(TiramisuCmdlineParser, help_formatter).format_help()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue