Source code for dtoolai.parameters

import json

[docs]class Parameters(object): """Class holding key/value parameter data. This class is designed to make working with a mixture of JSON, string and object data easier. """ def __init__(self, **kwargs): self.parameter_dict = dict(kwargs) self.param_types = {k: type(v) for k, v in kwargs.items()} @classmethod def from_dict(cls, input_dict): parameters = cls() parameters.parameter_dict = input_dict return parameters @classmethod def from_json_string(cls, json_string): json_dict = json.loads(json_string) parameters = cls() parameters.parameter_dict.update(json_dict) return parameters @classmethod def from_comma_separated_string(cls, raw_string): if raw_string is None: return cls() param_dict = dict(p.split('=') for p in raw_string.split(',')) parameters = cls() parameters.parameter_dict.update(param_dict) return parameters def update_from_comma_separated_string(self, raw_string, strict=True): param_dict = dict(p.split('=') for p in raw_string.split(',')) for k, v in param_dict.items(): if k not in self.parameter_dict and strict: raise NameError(f"Parameter name {k} not known and strict=True") param_type = self.param_types.get(k, str) self.parameter_dict[k] = param_type(v) def set_defaults(self, **kwargs): defaults = dict(kwargs) defaults.update(self.parameter_dict) self.parameter_dict = defaults def __getattr__(self, name): return self.parameter_dict[name] def __setitem__(self, key, value): self.parameter_dict[key] = value def __getitem__(self, key): return self.parameter_dict[key] def __repr__(self): return str(self.parameter_dict)