better key=value option parsing

pull/13/head
Mike Fährmann 8 years ago
parent 0ba9601b63
commit de9aa8f310
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -16,6 +16,7 @@ __email__ = "mike_faehrmann@web.de"
import os import os
import argparse import argparse
import json
from . import config, extractor, job from . import config, extractor, job
def build_cmdline_parser(): def build_cmdline_parser():
@ -34,7 +35,7 @@ def build_cmdline_parser():
parser.add_argument( parser.add_argument(
"-o", "--option", "-o", "--option",
metavar="OPT", action="append", default=[], metavar="OPT", action="append", default=[],
help="option value", help="additional 'key=value' option values",
) )
parser.add_argument( parser.add_argument(
"-g", "--get-urls", dest="list_urls", action="store_true", "-g", "--get-urls", dest="list_urls", action="store_true",
@ -55,6 +56,18 @@ def build_cmdline_parser():
) )
return parser return parser
def parse_option(opt):
try:
key, value = opt.split("=", 1)
try:
value = json.loads(value)
except json.decoder.JSONDecodeError:
pass
config.set(key.split("."), value)
except ValueError:
print("Invalid 'key=value' pair:", opt)
def main(): def main():
try: try:
config.load() config.load()
@ -68,11 +81,7 @@ def main():
config.set(("base-directory",), args.dest) config.set(("base-directory",), args.dest)
for opt in args.option: for opt in args.option:
try: parse_option(opt)
key, value = opt.split("=", 1)
config.set(key.split("."), value)
except TypeError:
pass
if args.list_modules: if args.list_modules:
for module_name in extractor.modules: for module_name in extractor.modules:
@ -80,12 +89,14 @@ def main():
else: else:
if not args.urls: if not args.urls:
parser.error("the following arguments are required: URL") parser.error("the following arguments are required: URL")
if args.list_urls: if args.list_urls:
jobtype = job.UrlJob jobtype = job.UrlJob
elif args.list_keywords: elif args.list_keywords:
jobtype = job.KeywordJob jobtype = job.KeywordJob
else: else:
jobtype = job.DownloadJob jobtype = job.DownloadJob
for url in args.urls: for url in args.urls:
try: try:
jobtype(url).run() jobtype(url).run()
@ -94,5 +105,6 @@ def main():
except exception.AuthenticationError: except exception.AuthenticationError:
print("Authentication failed. Please provide a valid " print("Authentication failed. Please provide a valid "
"username/password pair.") "username/password pair.")
except KeyboardInterrupt: except KeyboardInterrupt:
print("\nKeyboardInterrupt") print("\nKeyboardInterrupt")

Loading…
Cancel
Save