config: Update validate to use schema.name
This commit is contained in:
parent
6e42a381cd
commit
943a3097a9
@ -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:
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user