Source code for wheezy.core.config

""" ``config`` module.
"""

DEBUG = False


class Config(object):
[docs] """ Promotes ``options`` dict to attributes. If an option can not be found in ``options`` tries to get it from ``master``. ``master`` must have a requested option otherwise raises error. ``master`` can be a module. >>> from sys import modules >>> m = modules[Config.__module__] >>> c = Config(master=m) >>> c.DEBUG False or an instance of ``dict``. >>> c = Config(master={'DEBUG': False}) >>> c.DEBUG False ``options`` override ``master``. >>> c = Config(options={'DEBUG': True}, master=m) >>> c.DEBUG True If option is not defined it takes from ``master``. >>> c = Config(master=m) >>> c.DEBUG False Configs can be nested >>> m = Config(dict(B='b')) >>> c = Config(dict(A='a'), master=m) >>> c.B 'b' if ``options`` is an instance of ``Config`` than use its options only so this config can have own master. >>> options = Config(dict(A='a')) >>> c = Config(options) >>> c.A 'a' """ def __init__(self, options=None, master=None): if isinstance(options, Config): self.options = options.options else: self.options = options or {} if master: if isinstance(master, dict): self.get_master = lambda n: master[n] else: self.get_master = lambda n: getattr(master, n) else: self.get_master = lambda n: None def __getattr__(self, name): if name in self.options: val = self.options[name] else: val = self.get_master(name) setattr(self, name, val) return val