X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Fconfig.py;h=9fff40781d63a58db98004704c0c2aa6deeac1d0;hb=63bb5df8cf2595bbe106031911666fb7061a03aa;hp=4abed14ebc699d430f02cd0940abd5754c358c96;hpb=9b4f50c79b856146e1d90444df10e64797869997;p=m_librarian.git diff --git a/m_librarian/config.py b/m_librarian/config.py index 4abed14..9fff407 100755 --- a/m_librarian/config.py +++ b/m_librarian/config.py @@ -3,9 +3,10 @@ from __future__ import print_function import os try: - from ConfigParser import RawConfigParser + from ConfigParser import RawConfigParser, NoSectionError, NoOptionError except ImportError: # py3 - from configparser import RawConfigParser + from configparser import RawConfigParser, NoSectionError, NoOptionError + __all__ = ['get_config'] @@ -25,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): @@ -36,19 +37,46 @@ 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 +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 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: + _ml_config = RawConfigParser() if config_path is None: config_path = find_config_file() - _ml_config = RawConfigParser() - _ml_config.read(config_path) + if config_path is not None: + _ml_config.read(config_path) + _ml_config = ConfigWrapper(_ml_config) return _ml_config