예제 #1
0
def writer(cls, argv):
    conf_file_path = get_env_file_path(cls)
    if os.path.exists(conf_file_path):
        raise Exception(f"Found {conf_file_path} existing already")

    vals = OrderedDict()
    vals.update(_normalize_prefix(cls._default_prefix))
    for k in cls.__dict__.keys():
        if k in os.environ:
            vals[k] = os.environ[k]

    for arg in argv:
        if "=" in arg:
            k, val = arg.split("=")
            vals[k] = val

    dump = os.environ.get("VARS_DUMP",
                          cls._dump)  # type: Union[bool, List[str]]
    if dump:
        for k in cls.__dict__.keys():
            if isinstance(dump, (list, tuple)) and k not in dump:
                continue
            if k not in vals and not k.startswith("_"):
                vals[k] = getattr(cls, k)

    if vals:
        ordered_vals = OrderedDict()
        for k in cls.__dict__.keys():
            if k in vals:
                ordered_vals[k] = vals.pop(k)

        ordered_vals.update(vals)
        _write(conf_file_path, ordered_vals)
    else:
        log.info("Dynamic-Conf: No variables available.")  # pragma: no cover

    return vals