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