pgtoolkit/config.py
author Radek Brich <radek.brich@devl.cz>
Thu, 20 Oct 2011 13:54:35 +0200
changeset 14 a900bc629ecc
parent 10 f3a1b9792cc9
child 17 f768a3529ee7
permissions -rw-r--r--
TableDiffTool: add arguments to set different destination schema and table. PgDataDiff: fixes.

import logging


class ConfigParser:
    def __init__(self):
        self.args = {}       # config file arguments
        self.registered_args = {}
        self.log = logging.getLogger('config')

    def add_argument(self, name, type=str, default=None):
        self.registered_args[name] = {'type':type, 'default':default}

    def load(self, fname):
        # parse config file
        with open(fname) as f:
            exec(f.read(), self.args)
        # check contents
        return self.check()

    def check(self):
        ok = True
        for key in self.args.keys():
            if key == '__builtins__':
                continue
            if key in self.registered_args:
                # arg registered, check type
                type = self.registered_args[key]['type']
                if not isinstance(self.args[key], type):
                    ok = False
                    self.log.error("Bad type of config parameter '%s': is %s but should be %s",
                        key, type(self.args[key]), type)
            else:
                # arg not registered
                    ok = False
                    self.log.error("Unknown config parameter '%s'.", key)
        return ok

    def __getattr__(self, name):
        if name in self.args:
            return self.args[name]

        # raise error if not found
        raise AttributeError()