import argparse import json import logging import sys from typing import Callable, TYPE_CHECKING, Any from app import app from app.lists import lists if TYPE_CHECKING: _SubparserType = argparse._SubParsersAction[argparse.ArgumentParser] else: _SubparserType = Any def dump(list_f: Callable[[], Any]) -> None: json.dump(list_f(), sys.stdout, indent=2) class ListCliHandler: @classmethod def add_subparser_to(cls, subparsers: _SubparserType) -> None: parser = subparsers.add_parser("list", help="list operations") parser.add_argument("--dump", choices=sorted(lists.keys()), help="dump a list in JSON format") parser.set_defaults(cls=cls) def __init__(self, args: argparse.Namespace) -> None: self.args = args def run(self) -> None: with app.app_context(): if self.args.dump: dump(lists[self.args.dump]) else: logging.error("No action requested")