mirror of https://github.com/scrapy/scrapy.git
added support generic python literals in settings, and for explicitly
interpret a setting value as dict
This commit is contained in:
parent
8391b36251
commit
bf480015f4
|
|
@ -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):
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue