diff src/tools/config.py @ 1835:5b8a859d5bb4

core (config): getConfig now returns unicode and raise exceptions.ParsingError in case of parsing problem
author Goffi <goffi@goffi.org>
date Sun, 24 Jan 2016 18:28:08 +0100
parents a123e881f9e5
children ac2ac7fe8a9b
line wrap: on
line diff
--- a/src/tools/config.py	Sun Jan 24 18:24:01 2016 +0100
+++ b/src/tools/config.py	Sun Jan 24 18:28:08 2016 +0100
@@ -25,6 +25,7 @@
 
 from sat.core.constants import Const as C
 from sat.core.i18n import _
+from sat.core import exceptions
 
 from ConfigParser import SafeConfigParser, DEFAULTSECT, NoOptionError, NoSectionError
 from xdg import BaseDirectory
@@ -75,15 +76,16 @@
     @param section (str): section of the config file (None or '' for DEFAULT)
     @param name (str): name of the option
     @param default: value to use if not found, or Exception to raise an exception
-    @return: str, list or dict
+    @return (unicode, list, dict): parsed value
     @raise: NoOptionError if option is not present and default is Exception
             NoSectionError if section doesn't exists and default is Exception
+            exceptions.ParsingError error while parsing value
     """
     if not section:
         section = DEFAULTSECT
 
     try:
-        value = config.get(section, name)
+        value = config.get(section, name).decode('utf-8')
     except (NoOptionError, NoSectionError) as e:
         if default is Exception:
             raise e
@@ -95,7 +97,10 @@
     elif name.endswith('_list'):
         value = csv.reader([value], delimiter=',', quotechar='"', skipinitialspace=True).next()
     elif name.endswith('_dict'):
-        value = json.loads(value)
+        try:
+            value = json.loads(value)
+        except ValueError as e:
+            raise exceptions.ParsingError(u"Error while parsing data: {}".format(e))
         if not isinstance(value, dict):
-            raise ValueError(u"{name} value is not a dict: {value}".format(name=name, value=value))
+            raise exceptions.ParsingError(u"{name} value is not a dict: {value}".format(name=name, value=value))
     return value