support setting keyfile on command line

This commit is contained in:
lilydjwg 2020-08-17 14:32:39 +08:00
parent 8520a62271
commit 1f7552bbf7
3 changed files with 23 additions and 13 deletions

1
NEW
View file

@ -1,5 +1,4 @@
TODO:
* update tests
* update README
* set keyfile via command line?
* create source plugin documentation

View file

@ -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}')

View file

@ -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)