43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import argparse
|
|
import json
|
|
import logging
|
|
import sys
|
|
from typing import Callable, TYPE_CHECKING, Any, Dict
|
|
|
|
from app import app, mirror_sites
|
|
from app.lists.bridgelines import bridgelines
|
|
from app.lists.mirror_mapping import mirror_mapping
|
|
|
|
if TYPE_CHECKING:
|
|
_SubparserType = argparse._SubParsersAction[argparse.ArgumentParser]
|
|
else:
|
|
_SubparserType = Any
|
|
|
|
lists: Dict[str, Callable[[], Any]] = {
|
|
"mirror_mapping": mirror_mapping,
|
|
"bc2": mirror_sites,
|
|
"bridgelines": bridgelines,
|
|
}
|
|
|
|
|
|
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")
|