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