majuna/app/cli/list.py

45 lines
1.2 KiB
Python
Raw Normal View History

2022-05-01 17:08:48 +01:00
import argparse
import json
import logging
import sys
2022-05-16 11:44:03 +01:00
from typing import Callable, TYPE_CHECKING, Any, Dict
2022-05-01 17:08:48 +01:00
from app import app
from app.lists.bc2 import mirror_sites
2022-05-01 17:08:48 +01:00
from app.lists.bridgelines import bridgelines
from app.lists.mirror_mapping import mirror_mapping
2022-05-16 11:44:03 +01:00
if TYPE_CHECKING:
_SubparserType = argparse._SubParsersAction[argparse.ArgumentParser]
else:
_SubparserType = Any
lists: Dict[str, Callable[[], Any]] = {
2022-05-01 17:08:48 +01:00
"mirror_mapping": mirror_mapping,
"bc2": mirror_sites,
"bridgelines": bridgelines,
}
2022-05-16 11:44:03 +01:00
def dump(list_f: Callable[[], Any]) -> None:
2022-05-01 17:08:48 +01:00
json.dump(list_f(), sys.stdout, indent=2)
class ListCliHandler:
@classmethod
2022-05-16 11:44:03 +01:00
def add_subparser_to(cls, subparsers: _SubparserType) -> None:
2022-05-01 17:08:48 +01:00
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)
2022-05-16 11:44:03 +01:00
def __init__(self, args: argparse.Namespace) -> None:
2022-05-01 17:08:48 +01:00
self.args = args
2022-05-16 11:44:03 +01:00
def run(self) -> None:
2022-05-01 17:08:48 +01:00
with app.app_context():
if self.args.dump:
dump(lists[self.args.dump])
else:
logging.error("No action requested")