Implement help
This commit is contained in:
@@ -38,6 +38,12 @@ def _get_choices(field_: Field, base_type):
|
||||
return {}
|
||||
|
||||
|
||||
def _get_help(field_: Field):
|
||||
if HELP in field_.metadata:
|
||||
return {"help": field_.metadata[HELP]}
|
||||
return {}
|
||||
|
||||
|
||||
def _compute_arg_names(name, field_) -> list[str]:
|
||||
names = [_make_gnu_option(name)] # long option
|
||||
if SHORTOPT in field_.metadata:
|
||||
@@ -53,11 +59,25 @@ def _prepare_bool(ap: ArgumentParser, name, field_):
|
||||
defaults_cfg = _decide_default(field_)
|
||||
required = defaults_cfg.get("required", False)
|
||||
bool_parser = ap.add_mutually_exclusive_group(required=required)
|
||||
|
||||
if HELP in field_.metadata:
|
||||
true_help = {"help": f"{field_.metadata[HELP]} (enable)"}
|
||||
false_help = {"help": f"{field_.metadata[HELP]} (disable)"}
|
||||
else:
|
||||
true_help: dict[str, str] = {}
|
||||
false_help: dict[str, str] = {}
|
||||
|
||||
bool_parser.add_argument(
|
||||
_make_gnu_option(name), action="store_true", dest=name
|
||||
_make_gnu_option(name),
|
||||
action="store_true",
|
||||
dest=name,
|
||||
**true_help, # type: ignore
|
||||
)
|
||||
bool_parser.add_argument(
|
||||
_make_gnu_option(f"no_{name}"), action="store_false", dest=name
|
||||
_make_gnu_option(f"no_{name}"),
|
||||
action="store_false",
|
||||
dest=name,
|
||||
**false_help, # type: ignore
|
||||
)
|
||||
if not required:
|
||||
ap.set_defaults(**{name: defaults_cfg["default"]})
|
||||
@@ -99,13 +119,13 @@ def _prepare_trivial_cfg(_, field_: Field):
|
||||
def _prepare_list(ap: ArgumentParser, name, field_):
|
||||
arg_cfg = _prepare_list_cfg(name, field_)
|
||||
arg_names = _compute_arg_names(name, field_)
|
||||
ap.add_argument(*arg_names, **arg_cfg)
|
||||
ap.add_argument(*arg_names, **arg_cfg, **_get_help(field_))
|
||||
|
||||
|
||||
def _prepare_trivial(ap: ArgumentParser, name, field_):
|
||||
arg_cfg = _prepare_trivial_cfg(name, field_)
|
||||
arg_names = _compute_arg_names(name, field_)
|
||||
ap.add_argument(*arg_names, **arg_cfg)
|
||||
ap.add_argument(*arg_names, **arg_cfg, **_get_help(field_))
|
||||
|
||||
|
||||
def _prepare_field(ap: ArgumentParser, name: str, field_: Field):
|
||||
@@ -135,6 +155,7 @@ def argfield(
|
||||
shortopt: str | None = None,
|
||||
choices: list[typing.Any] | None = None,
|
||||
allow_empty: bool | None = None,
|
||||
help: str | None = None,
|
||||
**kwargs,
|
||||
):
|
||||
metadata = kwargs.pop("metadata", {})
|
||||
@@ -148,4 +169,7 @@ def argfield(
|
||||
if allow_empty is not None:
|
||||
metadata[ALLOW_EMPTY] = allow_empty
|
||||
|
||||
if help is not None:
|
||||
metadata[HELP] = help
|
||||
|
||||
return field(**kwargs, metadata=metadata)
|
||||
|
||||
Reference in New Issue
Block a user