added support generic python literals in settings, and for explicitly

interpret a setting value as dict
This commit is contained in:
Martin Olveyra 2013-03-19 16:02:53 -02:00
parent 8391b36251
commit bf480015f4
2 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,4 @@
import json
from . import default_settings
@ -37,6 +38,15 @@ class Settings(object):
else:
return str(value).split(',')
def getdict(self, name, default=None):
value = self.get(name)
if value is None:
return default or {}
if isinstance(value, basestring):
value = json.loads(value)
if isinstance(value, dict):
return value
raise ValueError("Cannot convert value for setting '%s' to dict: '%s'" % (name, value))
class CrawlerSettings(Settings):

View File

@ -21,6 +21,8 @@ class SettingsTest(unittest.TestCase):
'TEST_LIST1': ['one', 'two'],
'TEST_LIST2': 'one,two',
'TEST_STR': 'value',
'TEST_DICT1': {'key1': 'val1', 'ke2': 3},
'TEST_DICT2': '{"key1": "val1", "ke2": 3}',
})
assert settings.getbool('TEST_ENABLED1') is True
assert settings.getbool('TEST_ENABLED2') is True
@ -47,6 +49,12 @@ class SettingsTest(unittest.TestCase):
self.assertEqual(settings['TEST_STRx'], None)
self.assertEqual(settings.get('TEST_STRx'), None)
self.assertEqual(settings.get('TEST_STRx', 'default'), 'default')
self.assertEqual(settings.getdict('TEST_DICT1'), {'key1': 'val1', 'ke2': 3})
self.assertEqual(settings.getdict('TEST_DICT2'), {'key1': 'val1', 'ke2': 3})
self.assertEqual(settings.getdict('TEST_DICT3'), {})
self.assertEqual(settings.getdict('TEST_DICT3', {'key1': 5}), {'key1': 5})
self.assertRaises(ValueError, settings.getdict, 'TEST_LIST1')
class CrawlerSettingsTest(unittest.TestCase):