Source code for m_librarian.config
#! /usr/bin/env python
from __future__ import print_function
import os
try:
from ConfigParser import RawConfigParser, NoSectionError, NoOptionError
except ImportError: # py3
from configparser import RawConfigParser, NoSectionError, NoOptionError
__all__ = ['get_config']
def _find_config_dirs_posix():
config_dirs = []
if 'XDG_CONFIG_HOME' in os.environ:
config_dirs.append(os.environ['XDG_CONFIG_HOME'])
if 'XDG_CONFIG_DIRS' in os.environ:
config_dirs.extend(os.environ['XDG_CONFIG_DIRS'].split(':'))
home_config = os.path.expanduser('~/.config')
if home_config not in config_dirs:
config_dirs.append(home_config)
return config_dirs
def find_config_dirs():
if os.name == 'posix':
return _find_config_dirs_posix()
return 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, config_filename)
if os.path.exists(ml_conf_file):
return ml_conf_file
else:
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 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))
[docs]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()
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))
if __name__ == '__main__':
test()