config: Update validate to use schema.name

This commit is contained in:
Thomas Adamcik 2013-04-13 22:36:55 +02:00
parent 6e42a381cd
commit 943a3097a9
2 changed files with 15 additions and 17 deletions

View File

@ -19,7 +19,7 @@ config_schemas['logging']['console_format'] = String()
config_schemas['logging']['debug_format'] = String() config_schemas['logging']['debug_format'] = String()
config_schemas['logging']['debug_file'] = Path() config_schemas['logging']['debug_file'] = Path()
config_schemas['logging.levels'] = LogLevelConfigSchema('loglevels') config_schemas['logging.levels'] = LogLevelConfigSchema('logging.levels')
config_schemas['audio'] = ConfigSchema('audio') config_schemas['audio'] = ConfigSchema('audio')
config_schemas['audio']['mixer'] = String() config_schemas['audio']['mixer'] = String()
@ -85,12 +85,8 @@ def _load(files, defaults, overrides):
def validate(raw_config, schemas, extensions=None): def validate(raw_config, schemas, extensions=None):
# Collect config schemas to validate against # Collect config schemas to validate against
sections_and_schemas = schemas.items() extension_schemas = [e.get_config_schema() for e in extensions or []]
for extension in extensions or []: config, errors = _validate(raw_config, schemas.values() + extension_schemas)
sections_and_schemas.append(
(extension.ext_name, extension.get_config_schema()))
config, errors = _validate(raw_config, sections_and_schemas)
if errors: if errors:
# TODO: raise error instead. # TODO: raise error instead.
@ -107,10 +103,10 @@ def _validate(raw_config, schemas):
# Get validated config # Get validated config
config = {} config = {}
errors = [] errors = []
for name, schema in schemas: for schema in schemas:
try: try:
items = raw_config[name].items() items = raw_config[schema.name].items()
config[name] = schema.convert(items) config[schema.name] = schema.convert(items)
except KeyError: except KeyError:
errors.append('%s: section not found.' % name) errors.append('%s: section not found.' % name)
except exceptions.ConfigError as error: except exceptions.ConfigError as error:

View File

@ -52,6 +52,10 @@ class LoadConfigTest(unittest.TestCase):
class ValidateTest(unittest.TestCase): class ValidateTest(unittest.TestCase):
def setUp(self):
self.schema = mock.Mock()
self.schema.name = 'foo'
def test_empty_config_no_schemas(self): def test_empty_config_no_schemas(self):
conf, errors = config._validate({}, []) conf, errors = config._validate({}, [])
self.assertEqual({}, conf) self.assertEqual({}, conf)
@ -64,23 +68,21 @@ class ValidateTest(unittest.TestCase):
self.assertEqual([], errors) self.assertEqual([], errors)
def test_empty_config_single_schema(self): def test_empty_config_single_schema(self):
conf, errors = config._validate({}, [('foo', mock.Mock())]) conf, errors = config._validate({}, [self.schema])
self.assertEqual({}, conf) self.assertEqual({}, conf)
self.assertEqual(['foo: section not found.'], errors) self.assertEqual(['foo: section not found.'], errors)
def test_config_single_schema(self): def test_config_single_schema(self):
raw_config = {'foo': {'bar': 'baz'}} raw_config = {'foo': {'bar': 'baz'}}
schema = mock.Mock() self.schema.convert.return_value = {'baz': 'bar'}
schema.convert.return_value = {'baz': 'bar'} conf, errors = config._validate(raw_config, [self.schema])
conf, errors = config._validate(raw_config, [('foo', schema)])
self.assertEqual({'foo': {'baz': 'bar'}}, conf) self.assertEqual({'foo': {'baz': 'bar'}}, conf)
self.assertEqual([], errors) self.assertEqual([], errors)
def test_config_single_schema_config_error(self): def test_config_single_schema_config_error(self):
raw_config = {'foo': {'bar': 'baz'}} raw_config = {'foo': {'bar': 'baz'}}
schema = mock.Mock() self.schema.convert.side_effect = exceptions.ConfigError({'bar': 'bad'})
schema.convert.side_effect = exceptions.ConfigError({'bar': 'bad'}) conf, errors = config._validate(raw_config, [self.schema])
conf, errors = config._validate(raw_config, [('foo', schema)])
self.assertEqual(['foo/bar: bad'], errors) self.assertEqual(['foo/bar: bad'], errors)
self.assertEqual({}, conf) self.assertEqual({}, conf)