From 8960f8904c73a8aaa86d31163ae9eabb4c74c1bb Mon Sep 17 00:00:00 2001 From: Iain Learmonth Date: Sun, 1 May 2022 17:08:48 +0100 Subject: [PATCH] lists: fix mirror mapping output --- app/cli/__main__.py | 2 ++ app/cli/list.py | 38 +++++++++++++++++++++++++++++++++++++ app/lists/mirror_mapping.py | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 app/cli/list.py diff --git a/app/cli/__main__.py b/app/cli/__main__.py index 08cbedf..87bfcb3 100644 --- a/app/cli/__main__.py +++ b/app/cli/__main__.py @@ -4,6 +4,7 @@ import sys from os.path import basename from app.cli.db import DbCliHandler +from app.cli.list import ListCliHandler def parse_args(argv): @@ -13,6 +14,7 @@ def parse_args(argv): parser.add_argument("-v", "--verbose", help="increase logging verbosity", action="store_true") subparsers = parser.add_subparsers(title="command", help="command to run") DbCliHandler.add_subparser_to(subparsers) + ListCliHandler.add_subparser_to(subparsers) args = parser.parse_args(argv[1:]) if "cls" in args: command = args.cls(args) diff --git a/app/cli/list.py b/app/cli/list.py new file mode 100644 index 0000000..cbd3760 --- /dev/null +++ b/app/cli/list.py @@ -0,0 +1,38 @@ +import argparse +import json +import logging +import sys +from typing import Callable + +from app import app, mirror_sites +from app.lists.bridgelines import bridgelines +from app.lists.mirror_mapping import mirror_mapping + +lists = { + "mirror_mapping": mirror_mapping, + "bc2": mirror_sites, + "bridgelines": bridgelines, +} + + +def dump(list_f: Callable): + json.dump(list_f(), sys.stdout, indent=2) + + +class ListCliHandler: + @classmethod + def add_subparser_to(cls, subparsers: argparse._SubParsersAction) -> 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): + self.args = args + + def run(self): + with app.app_context(): + if self.args.dump: + dump(lists[self.args.dump]) + else: + logging.error("No action requested") diff --git a/app/lists/mirror_mapping.py b/app/lists/mirror_mapping.py index c0d3a17..0894247 100644 --- a/app/lists/mirror_mapping.py +++ b/app/lists/mirror_mapping.py @@ -23,7 +23,7 @@ class MirrorMapping(BaseModel): def mirror_mapping(): - return MirrorMapping(**{ + return MirrorMapping(__root__={ d.url.lstrip("https://"): MMMirror( origin_domain=d.origin.domain_name, origin_domain_normalized=d.origin.domain_name.lstrip("www."),