]> git.phdru.name Git - m_librarian.git/blobdiff - m_librarian/config.py
Feat(config): Warp config to provide default value
[m_librarian.git] / m_librarian / config.py
index ca7eadd4fa95a168979c99672d3b6766ac6b19aa..cbf76b7aab2c8e168ae734d6b09f8055519c181d 100755 (executable)
@@ -1,7 +1,12 @@
 #! /usr/bin/env python
 
+from __future__ import print_function
 import os
-from ConfigParser import RawConfigParser
+try:
+    from ConfigParser import RawConfigParser, NoSectionError, NoOptionError
+except ImportError:  # py3
+    from configparser import RawConfigParser, NoSectionError, NoOptionError
+
 
 __all__ = ['get_config']
 
@@ -21,7 +26,7 @@ def _find_config_dirs_posix():
 def find_config_dirs():
     if os.name == 'posix':
         return _find_config_dirs_posix()
-    raise OSError("Unknow OS")
+    return None
 
 
 def find_config_file(config_dirs=None):
@@ -32,26 +37,50 @@ def find_config_file(config_dirs=None):
         if os.path.exists(ml_conf_file):
             return ml_conf_file
     else:
-        raise IOError("Cannot find m_librarian.conf in %s" % config_dirs)
+        return None
 
 
 _ml_config = None
 
 
-def get_config(config_filename=None):
+class ConfigWrapper(object):
+    def __init__(self, config):
+        self.config = config
+
+    def get(self, section, option, default=None):
+        try:
+            return self.config.get(section, option)
+        except (NoSectionError, NoOptionError):
+            return default
+
+    def set(self, section, option, value):
+        self.config.set(section, option, value)
+
+    def getint(self, section, option, default=0):
+        try:
+            return self.config.getint(section, option)
+        except (NoSectionError, NoOptionError):
+            return default
+        # Do not catch ValueError here, it must be propagated
+
+
+def get_config(config_path=None):
     global _ml_config
     if _ml_config is None:
-        if config_filename is None:
-            config_filename = find_config_file()
         _ml_config = RawConfigParser()
-        _ml_config.read(config_filename)
+        if config_path is None:
+            config_path = find_config_file()
+        if config_path is not None:
+            _ml_config.read(config_path)
+        _ml_config = ConfigWrapper(_ml_config)
     return _ml_config
 
 
 def test():
     config_dirs = find_config_dirs()
-    print "Config dirs:", config_dirs
-    print "Config file:", find_config_file(config_dirs)
+    print("Config dirs:", config_dirs)
+    print("Config file:", find_config_file(config_dirs))
+
 
 if __name__ == '__main__':
     test()