import configparser
[docs]class Config:
"""
Helper class for easier config loading with sensible defaults
"""
def __init__(self, config=None, section=None):
if config is None:
config = 'config.ini'
if type(config) is str:
config_file = config
config = configparser.ConfigParser()
config.read(config_file)
if section and section in config:
config = config[section]
self.config = config
self.overrides = {}
def __getattr__(self, name):
if name in self.overrides:
return self.overrides[name]
if name in self.config:
return self.config[name]
raise KeyError(name)
def __contains__(self, key):
return key in self.config or key in self.overrides
def __getitem__(self, key):
return self.__getattr__(key)
[docs] def update(self, vals):
self.overrides.update(vals)
[docs] def keys(self):
keys = tuple(set(list(self.config.keys()) + list(self.overrides.keys())))
return keys
[docs] def is_false(self, key):
if key not in self:
return True
val = self[key]
return val in ['', 'false', '0', 'none', 'off']
[docs] def class_from_config(self, cls, *args, **kwargs):
return cls(**self(*args, **kwargs))