Module brevettiai.utils.argparse_utils
Expand source code
import argparse
import json
from distutils.util import strtobool
argparse_types = {
dict: lambda x: json.loads(x),
list: lambda x: json.loads(x),
bool: lambda x: bool(strtobool(x))
}
def parse_args_from_dict(args, target):
parser = argparse.ArgumentParser()
args = [arg for arg_str in args for arg in arg_str.split("=")]
for arg in args:
if arg.startswith("--"):
uri = arg[2:].split(".")
try:
x = target
for key in uri:
x = x[key]
type_ = argparse_types.get(type(x), type(x))
except KeyError:
type_ = str
parser.add_argument(arg, type=type_)
target_args, _ = parser.parse_known_args(args)
return target_args
def overload_dict_from_args(args, target, errors_ok=True):
for k, v in vars(args).items():
uri = k.split(".")
try:
x = target
for key in uri[:-1]:
x = x[key]
x[uri[-1]] = v
except KeyError as ex:
if not errors_ok:
raise ex
Functions
def overload_dict_from_args(args, target, errors_ok=True)
-
Expand source code
def overload_dict_from_args(args, target, errors_ok=True): for k, v in vars(args).items(): uri = k.split(".") try: x = target for key in uri[:-1]: x = x[key] x[uri[-1]] = v except KeyError as ex: if not errors_ok: raise ex
def parse_args_from_dict(args, target)
-
Expand source code
def parse_args_from_dict(args, target): parser = argparse.ArgumentParser() args = [arg for arg_str in args for arg in arg_str.split("=")] for arg in args: if arg.startswith("--"): uri = arg[2:].split(".") try: x = target for key in uri: x = x[key] type_ = argparse_types.get(type(x), type(x)) except KeyError: type_ = str parser.add_argument(arg, type=type_) target_args, _ = parser.parse_known_args(args) return target_args