#! /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']
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):
+def find_config_file(config_dirs=None, config_filename='m_librarian.conf'):
if config_dirs is None:
config_dirs = find_config_dirs()
for d in config_dirs:
- ml_conf_file = os.path.join(d, 'm_librarian.conf')
+ ml_conf_file = os.path.join(d, config_filename)
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 getlist(self, section, option, default=None, sep=None):
+ value = self.get(section, option)
+ if not value:
+ if default is None:
+ return []
+ return default
+ return value.split(sep)
+
+ def getpath(self, section, option, default=os.path.curdir):
+ path = self.get(section, option, default=default)
+ return os.path.expanduser(os.path.expandvars(path))
+
+
+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()