""" Global configuration objects. Joe Presbrey """ from ConfigParser import ConfigParser, NoSectionError, NoOptionError import os _ENV_BASE='_SQL_MIT_EDU' class Section(object): """Configuration section namespace.""" def __init__(self, d): self.items = d def __getattr__(self, k): v = self.items.get(k, None) try: if str(int(v)) == str(v): v = int(v) except TypeError: pass except ValueError: pass try: if str(v).lower() == 'true': v = True if str(v).lower() == 'false': v = False except TypeError: pass except ValueError: pass return v def __iter__(self): return iter(self.items) def __str__(self): return str(self.items) class Config(object): """Base configuration namespace.""" def __init__(self, filename, *args, **kwargs): self._cp = ConfigParser(*args, **kwargs) self.read(filename) self._none = Section({}) def _samefile(self, f1, f2): try: return os.path.samefile(f1, f2) except OSError, e: return False def read(self, filename): config_path = [os.path.join(x, filename) for x in [ os.path.dirname(__file__), '/etc']] if _ENV_BASE in os.environ: config_path.insert(1, os.path.join(os.environ[_ENV_BASE], 'etc', filename)) def append(path): r = os.path.join(path, filename) if not r in config_path: config_path.append(r) if 'HOME' in os.environ: append(os.environ['HOME']) if 'PWD' in os.environ: append(os.environ['PWD']) self._cp.read(config_path) self._sections = dict(map(lambda x: (x, Section(dict(self._cp.items(x)))), self._cp.sections())) def get(self, *av, **kw): try: return self._cp.get(*av, **kw) except NoSectionError: return None except NoOptionError: return None def __getattr__(self, k): return self._sections.get(k, self._none) def __str__(self): d = {} for x in self._cp.sections(): d[x] = dict(self._cp.items(x)) return str(d) if __name__ == '__main__': import mitsql print mitsql.config