From 1f7552bbf72b609178def544b7183399238f238d Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Mon, 17 Aug 2020 14:32:39 +0800 Subject: [PATCH] support setting keyfile on command line --- NEW | 1 - nvchecker/__main__.py | 16 +++++++++++++--- nvchecker/core.py | 19 ++++++++++--------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/NEW b/NEW index 0b8312c..33403a1 100644 --- a/NEW +++ b/NEW @@ -1,5 +1,4 @@ TODO: * update tests * update README -* set keyfile via command line? * create source plugin documentation diff --git a/nvchecker/__main__.py b/nvchecker/__main__.py index 1a01056..04f456f 100755 --- a/nvchecker/__main__.py +++ b/nvchecker/__main__.py @@ -12,12 +12,15 @@ from typing import Coroutine import structlog from . import core -from .util import VersData, RawResult +from .util import VersData, RawResult, KeyManager logger = structlog.get_logger(logger_name=__name__) def main() -> None: parser = argparse.ArgumentParser(description='New version checker for software') + parser.add_argument('-k', '--keyfile', + metavar='FILE', type=str, + help='use specified keyfile') parser.add_argument('-t', '--tries', default=1, type=int, metavar='N', help='try N times when errors occur') core.add_common_arguments(parser) @@ -33,13 +36,20 @@ def main() -> None: else: file = args.file - entries, options = core.load_file(file) + entries, options = core.load_file( + file, use_keymanager=bool(args.keyfile)) + + if args.keyfile: + keymanager = KeyManager(args.keyfile) + else: + keymanager = options.keymanager + token_q = core.token_queue(options.max_concurrency) result_q: asyncio.Queue[RawResult] = asyncio.Queue() try: futures = core.dispatch( entries, token_q, result_q, - options.keymanager, args.tries, + keymanager, args.tries, ) except ModuleNotFoundError as e: sys.exit(f'Error: {e}') diff --git a/nvchecker/core.py b/nvchecker/core.py index 5346d1a..b78d60a 100644 --- a/nvchecker/core.py +++ b/nvchecker/core.py @@ -133,10 +133,12 @@ class Options(NamedTuple): keymanager: KeyManager def load_file( - file: TextIO, + file: TextIO, *, + use_keymanager: bool, ) -> Tuple[Entries, Options]: config = toml.load(file) ver_files: Optional[Tuple[Path, Path]] = None + keymanager = KeyManager(None) if '__config__' in config: c = config.pop('__config__') @@ -151,19 +153,18 @@ def load_file( newver = d / newver_s ver_files = oldver, newver - keyfile = c.get('keyfile') - if keyfile: - keyfile_s = os.path.expandvars( - os.path.expanduser(c.get('keyfile'))) - keyfile = d / keyfile_s + if use_keymanager: + keyfile = c.get('keyfile') + if keyfile: + keyfile_s = os.path.expandvars( + os.path.expanduser(c.get('keyfile'))) + keyfile = d / keyfile_s + keymanager = KeyManager(keyfile) max_concurrency = c.get( 'max_concurrency', 20) - keymanager = KeyManager(keyfile) - else: max_concurrency = 20 - keymanager = KeyManager(None) return cast(Entries, config), Options( ver_files, max_concurrency, keymanager)