Mercurial > libervia-backend
diff src/tools/config.py @ 1064:7ee9d9db67b9
memory, tools (config): move special config retrieval from memory to tools
author | souliane <souliane@mailoo.org> |
---|---|
date | Mon, 09 Jun 2014 20:40:13 +0200 |
parents | a5cfa9bb4541 |
children | 9c17bd37e6e5 |
line wrap: on
line diff
--- a/src/tools/config.py Sat Jun 07 15:39:20 2014 +0200 +++ b/src/tools/config.py Mon Jun 09 20:40:13 2014 +0200 @@ -26,9 +26,10 @@ from sat.core.constants import Const as C from sat.core.i18n import _ -from ConfigParser import SafeConfigParser, DEFAULTSECT +from ConfigParser import SafeConfigParser, DEFAULTSECT, NoOptionError, NoSectionError from xdg import BaseDirectory import os +import csv def fixConfigOption(section, option, value, silent=True): @@ -64,3 +65,33 @@ value = '******' log.warning(_("Config auto-update: %(option)s set to %(value)s in the file %(config_file)s") % {'option': option, 'value': value, 'config_file': target_file}) + + +def getConfig(config, section, name, default=None): + """Get a configuration option + + @param config (SafeConfigParser): the configuration instance + @param section (str): section of the config file (None or '' for DEFAULT) + @param name (str): name of the option + @param default (str): eventually default to this value, if not None + @return: str, list or dict + """ + if not section: + section = DEFAULTSECT + + try: + value = config.get(section, name) + except (NoOptionError, NoSectionError) as e: + if default is None: + raise e + value = default + + if name.endswith('_path') or name.endswith('_dir'): + value = os.path.expanduser(value) + # thx to Brian (http://stackoverflow.com/questions/186857/splitting-a-semicolon-separated-string-to-a-dictionary-in-python/186873#186873) + elif name.endswith('_list'): + value = csv.reader([value], delimiter=',', quotechar='"').next() + elif name.endswith('_dict'): + value = dict(csv.reader([item], delimiter=':', quotechar='"').next() + for item in csv.reader([value], delimiter=',', quotechar='"').next()) + return value