#!/usr/bin/env python3 # encoding: utf-8 # """ cfgfile.py Created by Marcus Stoegbauer on 2013-01-12. """ import configparser import os import re class Conf(object): confobj = configparser.RawConfigParser() cfgfile = '' debug = None def __init__(self, filename=None): """if filename is set, open config file and initialize the ConfigParser """ self.confobj = configparser.RawConfigParser() if filename: self.setfilename(filename) def setdebug(self, debug): """docstring for setdebug""" self.debug = debug def setfilename(self, filename): """initialize the ConfigParser """ ret = self.confobj.read(filename) if len(ret) == 0 or ret[0] != filename: raise Exception('Cannot read config file ' + filename) self.cfgfile = filename if self.debug: self.debug.debug("Read config file %s" % filename, 2) self.debug.debug("Replacing environment variables in %s." % filename, 3) for s in self.confobj.sections(): for (i, val) in self.confobj.items(s): tempre = re.search(r"\$([A-Z]+)[^A-Z]*", val) if tempre: varname = tempre.group(1) if self.debug: self.debug.debug("Found variable %s in %s." % (varname, i), 3) if varname in os.environ: if self.debug: self.debug.debug("%s exists in environment, replacing with %s." % (varname, os.environ[varname]), 3) self.set(s, i, val.replace("$"+varname, os.environ[varname])) def get(self, section, option): """returns the value of option in section """ if not self.cfgfile: raise Exception('No config file set') return self.confobj.get(section, option) def set(self, section, option, value): """docstring for update""" self.confobj.set(section, option, value) def getitems(self, section): """returns all items in section """ if not self.cfgfile: raise Exception('No config file set') return self.confobj.items(section) def check(self, section, option): """checks for option in section""" return self.confobj.has_option(section, option)