pgtoolkit/configparser.py
changeset 78 64c62ac8f65d
parent 17 f768a3529ee7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pgtoolkit/configparser.py	Tue Mar 19 16:45:37 2013 +0100
@@ -0,0 +1,45 @@
+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}
+        self.args[name] = 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) and not self.args[key] is None:
+                    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()
+