Compare commits
No commits in common. "b2f929b30d5d5fc3ab3e44fdc76d0fc5180881fa" and "fd8829bb242101e6c85d9be95ec0a5c20fa178ed" have entirely different histories.
b2f929b30d
...
fd8829bb24
5 changed files with 15 additions and 106 deletions
|
|
@ -1,10 +1,3 @@
|
|||
## 0.7.0a7 (2026-06-12)
|
||||
|
||||
### Fix
|
||||
|
||||
- remove prog and description attribute
|
||||
- support exit_on_error
|
||||
|
||||
## 0.7.0a6 (2026-06-11)
|
||||
|
||||
### Feat
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ requires = ["flit_core >=3.8.0,<4"]
|
|||
|
||||
[project]
|
||||
name = "tiramisu_cmdline_parser"
|
||||
version = "0.7.0a7"
|
||||
version = "0.7.0a6"
|
||||
authors = [{name = "Emmanuel Garette", email = "gnunux@gnunux.info"}]
|
||||
readme = "README.md"
|
||||
description = "command-line parser using Tiramisu"
|
||||
|
|
|
|||
|
|
@ -1,85 +0,0 @@
|
|||
import pytest
|
||||
|
||||
from argparse import ArgumentError
|
||||
|
||||
from tiramisu_cmdline_parser import TiramisuCmdlineParser
|
||||
from tiramisu import StrOption, BoolOption, OptionDescription, Config
|
||||
from .utils import TestHelpFormatter
|
||||
|
||||
|
||||
def get_config(has_tree=False, default_verbosity=False):
|
||||
booloption = BoolOption('disabled',
|
||||
'disabled',
|
||||
properties=('disabled',),
|
||||
)
|
||||
booloption2 = BoolOption('verbosity',
|
||||
'increase output verbosity',
|
||||
default=default_verbosity,
|
||||
)
|
||||
stroption = StrOption('option',
|
||||
'an option',
|
||||
)
|
||||
root = OptionDescription('root',
|
||||
'root',
|
||||
[booloption, booloption2, stroption],
|
||||
)
|
||||
if has_tree:
|
||||
root = OptionDescription('root',
|
||||
'root',
|
||||
[root],
|
||||
)
|
||||
config = Config(root)
|
||||
config.property.read_write()
|
||||
return config
|
||||
|
||||
|
||||
def test_exit_boolean():
|
||||
config = get_config(default_verbosity=True)
|
||||
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False)
|
||||
parser.parse_args(['--verbosity'])
|
||||
parser.parse_known_args(['--verbosity'])
|
||||
|
||||
|
||||
def test_exit_disabled():
|
||||
config = get_config(default_verbosity=True)
|
||||
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False)
|
||||
error = None
|
||||
try:
|
||||
parser.parse_args(['--disabled'])
|
||||
except ArgumentError as err:
|
||||
error = err
|
||||
assert error
|
||||
assert str(error) == 'unrecognized arguments: --disabled (cannot access to option "disabled" because has property "disabled")'
|
||||
|
||||
|
||||
def test_exit_string():
|
||||
config = get_config(default_verbosity=True)
|
||||
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False)
|
||||
parser.parse_args(['--option', 'value'])
|
||||
parser.parse_known_args(['--option', 'value'])
|
||||
|
||||
|
||||
def test_exit_unknown():
|
||||
config = get_config(default_verbosity=True)
|
||||
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False)
|
||||
error = None
|
||||
try:
|
||||
parser.parse_args(['--unknown', 'value'])
|
||||
except ArgumentError as err:
|
||||
error = err
|
||||
assert error
|
||||
assert str(error) == 'unrecognized arguments: --unknown value'
|
||||
parser.parse_known_args(['--unknown', 'value'])
|
||||
|
||||
|
||||
def test_exit_known_unknown():
|
||||
config = get_config(default_verbosity=True)
|
||||
parser = TiramisuCmdlineParser(config, 'prog.py', formatter_class=TestHelpFormatter, color=False, exit_on_error=False)
|
||||
error = None
|
||||
try:
|
||||
parser.parse_args(['--option', 'value', '--unknown', 'value'])
|
||||
except ArgumentError as err:
|
||||
error = err
|
||||
assert error
|
||||
assert str(error) == 'unrecognized arguments: --unknown value'
|
||||
parser.parse_known_args(['--unknown', 'value'])
|
||||
|
|
@ -1 +1 @@
|
|||
__version__ = "0.7.0a7"
|
||||
__version__ = "0.7.0a6"
|
||||
|
|
|
|||
|
|
@ -327,7 +327,6 @@ class TiramisuCmdlineParser(ArgumentParser):
|
|||
add_extra_options: bool = True,
|
||||
short_name_max_len: int = 1,
|
||||
add_help: bool = True,
|
||||
exit_on_error: bool = True,
|
||||
_forhelp: bool = False,
|
||||
**kwargs,
|
||||
):
|
||||
|
|
@ -361,7 +360,7 @@ class TiramisuCmdlineParser(ArgumentParser):
|
|||
else:
|
||||
subconfig = subconfig.option(self.root)
|
||||
self.namespace = TiramisuNamespace(self.config, self.root)
|
||||
super().__init__(*args, add_help=add_help, exit_on_error=exit_on_error, **kwargs)
|
||||
super().__init__(*args, add_help=add_help, **kwargs)
|
||||
self.register("action", "help", _TiramisuHelpAction)
|
||||
self._config_to_argparser(
|
||||
_forhelp,
|
||||
|
|
@ -403,7 +402,10 @@ class TiramisuCmdlineParser(ArgumentParser):
|
|||
except (ValueError, LeadershipError, AttributeError) as err:
|
||||
self.error(err)
|
||||
if args != args_ and args_ and args_[0].startswith(self.prefix_chars):
|
||||
kwargs = self.clean_kwargs()
|
||||
kwargs = self.kwargs
|
||||
if "epilog" in kwargs:
|
||||
kwargs = kwargs.copy()
|
||||
del kwargs["epilog"]
|
||||
# option that was disabled are no more disable
|
||||
# so create a new parser
|
||||
new_parser = TiramisuCmdlineParser(
|
||||
|
|
@ -765,7 +767,10 @@ class TiramisuCmdlineParser(ArgumentParser):
|
|||
return namespaces, unknown
|
||||
|
||||
def format_usage(self, *args, **kwargs):
|
||||
kwargs_ = self.clean_kwargs()
|
||||
kwargs_ = self.kwargs
|
||||
if "epilog" in kwargs_:
|
||||
kwargs_ = kwargs_.copy()
|
||||
del kwargs_["epilog"]
|
||||
help_formatter = TiramisuCmdlineParser(
|
||||
self.config,
|
||||
self.prog,
|
||||
|
|
@ -786,7 +791,10 @@ class TiramisuCmdlineParser(ArgumentParser):
|
|||
)
|
||||
|
||||
def format_help(self):
|
||||
kwargs = self.clean_kwargs()
|
||||
kwargs = self.kwargs
|
||||
if "epilog" in kwargs:
|
||||
kwargs = kwargs.copy()
|
||||
del kwargs["epilog"]
|
||||
help_formatter = TiramisuCmdlineParser(
|
||||
self.config,
|
||||
self.prog,
|
||||
|
|
@ -812,10 +820,3 @@ class TiramisuCmdlineParser(ArgumentParser):
|
|||
super().error(msg)
|
||||
else:
|
||||
raise ArgumentError(None, msg)
|
||||
|
||||
def clean_kwargs(self):
|
||||
kwargs = self.kwargs.copy()
|
||||
for arg in ["epilog", "prog", "description"]:
|
||||
if arg in kwargs:
|
||||
del kwargs[arg]
|
||||
return kwargs
|
||||
|
|
|
|||
Loading…
Reference in a new issue