Marco Ricci
Add prototype command-line interface
Marco Ricci commited 23390bc at 2024-06-22 19:54:19
# SPDX-FileCopyrightText: 2024 Marco Ricci <m@the13thletter.info>
#
# SPDX-License-Identifier: MIT
"""Command-line interface for derivepassphrase.
"""
from __future__ import annotations
import inspect
import json
import pathlib
from typing import Any, TextIO
import click
import derivepassphrase as dpp
from derivepassphrase import types as dpp_types
__author__ = dpp.__author__
__version__ = dpp.__version__
__all__ = ('derivepassphrase',)
prog_name = 'derivepassphrase'
# Implement help text groups. Inspired by
# https://github.com/pallets/click/issues/373#issuecomment-515293746 and
# modified to support group epilogs as well.
class OptionGroupOption(click.Option):
option_group_name = ''
epilog = ''
class CommandWithHelpGroups(click.Command):
def format_options(
self, ctx: click.Context, formatter: click.HelpFormatter,
) -> None:
help_records: dict[str, list[tuple[str, str]]] = {}
epilogs: dict[str, str] = {}
params = self.params[:]
if (help_opt := self.get_help_option(ctx)) and help_opt not in params:
params.append(help_opt)
for param in params:
rec = param.get_help_record(ctx)
if rec is not None:
if isinstance(param, OptionGroupOption):
group_name = param.option_group_name
epilogs.setdefault(group_name, param.epilog)
else:
group_name = ''
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX