Source code for hush.cli

"""Contains the hush package's main entry point."""

from typing import List, Optional, Sequence

import clap
from logutils import Logger
from pydantic.dataclasses import dataclass

from . import __doc__ as DESCRIPTION, get_secret


@dataclass(frozen=True)
class Arguments(clap.Arguments):
    """Command-line arguments."""

    key: str
    namespace: List[str]
    user: Optional[str]


[docs]def parse_cli_args(argv: Sequence[str]) -> Arguments: """Parses command-line arguments.""" parser = clap.Parser(name="hush", description=DESCRIPTION) parser.add_argument( "key", help=( "The key that corresponds with the secret that we wish to" " retrieve." ), ) parser.add_argument( "-n", "--namespace", type=lambda x: x.split(","), default=[], help=( "The namespace the secret is apart of. This argument should be a" " comma-separated list of namespace parts." ), ) parser.add_argument( "-u", "--user", default=None, help=( "Run secret retrieving commands as this user instead of the" " current user." ), ) args = parser.parse_args(argv[1:]) kwargs = vars(args) return Arguments(**kwargs)
[docs]def run(args: Arguments) -> int: """This function acts as this tool's main entry point.""" log = Logger(__name__).bind_fargs(locals()) secret = get_secret(args.key, namespace=args.namespace, user=args.user) if secret is None: log.error( "Hush was unable to retrieve this secret.", key=args.key, namespace=args.namespace, user=args.user, ) return 1 print(secret) return 0
main = clap.main_factory(parse_cli_args, run)