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