changeset 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 6ec513ad92c2
children 9378c80e3408
files src/memory/memory.py src/tools/config.py
diffstat 2 files changed, 35 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/memory/memory.py	Sat Jun 07 15:39:20 2014 +0200
+++ b/src/memory/memory.py	Mon Jun 09 20:40:13 2014 +0200
@@ -20,7 +20,6 @@
 from sat.core.i18n import _
 
 import os.path
-import csv
 from ConfigParser import SafeConfigParser, NoOptionError, NoSectionError
 from uuid import uuid4
 from sat.core.log import getLogger
@@ -34,7 +33,7 @@
 from sat.memory.params import Params
 from sat.memory.disco import Discovery
 from sat.memory.crypto import BlockCipher
-from sat.tools.config import fixConfigOption
+from sat.tools import config as tools_config
 
 
 class Sessions(object):
@@ -180,7 +179,7 @@
     if os.path.isfile(os.path.expanduser(old_default) + '/' + C.SAVEFILE_DATABASE):
         if not silent:
             log.warning(_("A database has been found in the default local_dir for previous versions (< 0.5)"))
-        fixConfigOption('', 'local_dir', old_default, silent)
+        tools_config.fixConfigOption('', 'local_dir', old_default, silent)
 
 
 class Memory(object):
@@ -222,22 +221,7 @@
         @param section: section of the config file (None or '' for DEFAULT)
         @param name: name of the option
         """
-        if not section:
-            section = 'DEFAULT'
-        try:
-            value = self.config.get(section, name)
-        except (NoOptionError, NoSectionError):
-            value = ''
-
-        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
+        return tools_config.getConfig(self.config, section, name, default='')
 
     def load_xml(self, filename):
         """Load parameters template from xml file
--- 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