More cleanups to Setting/Argument type handling, mostly for count != 1.
[hooke.git] / hooke / config.py
index 1c5c4874d53d4191078b599f8fb5aa6e91e8e380..d43a5f4206f29463b6001a4ecef13ba3ee0c1a76 100644 (file)
@@ -21,6 +21,7 @@ Hooke.
 """
 
 import ConfigParser as configparser
+import logging
 import os.path
 import textwrap
 import unittest
@@ -44,11 +45,12 @@ class Setting (object):
     """An entry (section or option) in HookeConfigParser.
     """
     def __init__(self, section, option=None, value=None, type='string',
-                 help=None, wrap=True):
+                 count=1, help=None, wrap=True):
         self.section = section
         self.option = option
-        self.value = to_string(value=value, type=type)
+        self.value = value
         self.type = type
+        self.count = count
         self.help = help
         self.wrap = wrap
 
@@ -299,13 +301,20 @@ class HookeConfigParser (configparser.RawConfigParser):
         for i,kv in enumerate(items):
             key,value = kv
             setting = self._default_settings_dict[(section, key)]
-            items[i] = (key, from_string(value=value, type=setting.type))
+            try:
+                items[i] = (key, from_string(value=value, type=setting.type,
+                                             count=setting.count))
+            except ValueError, e:
+                log = logging.getLogger('hooke') 
+                log.error("could not convert '%s' (%s) for %s/%s: %s"
+                          % (value, type(value), section, key, e))
+                raise
         return items
 
     def set(self, section, option, value):
         """Set an option."""
         setting = self._default_settings_dict[(section, option)]
-        value = to_string(value=value, type=setting.type)
+        value = to_string(value=value, type=setting.type, count=setting.count)
         # Can't use super() because RawConfigParser is a classic class
         #return super(HookeConfigParser, self).set(section, option, value)
         configparser.RawConfigParser.set(self, section, option, value)