config: Set missing/invalid keys to none
This commit is contained in:
parent
f0131fdc93
commit
d8f6886311
@ -75,10 +75,12 @@ class ConfigSchema(object):
|
|||||||
if suggestion:
|
if suggestion:
|
||||||
errors[key] += ' Did you mean %s?' % suggestion
|
errors[key] += ' Did you mean %s?' % suggestion
|
||||||
except ValueError as e: # deserialization failed
|
except ValueError as e: # deserialization failed
|
||||||
|
result[key] = None
|
||||||
errors[key] = str(e)
|
errors[key] = str(e)
|
||||||
|
|
||||||
for key in self._schema:
|
for key in self._schema:
|
||||||
if key not in result and key not in errors:
|
if key not in result and key not in errors:
|
||||||
|
result[key] = None
|
||||||
errors[key] = 'config key not found.'
|
errors[key] = 'config key not found.'
|
||||||
|
|
||||||
return result, errors
|
return result, errors
|
||||||
@ -131,6 +133,7 @@ class LogLevelConfigSchema(object):
|
|||||||
try:
|
try:
|
||||||
result[key] = self._config_value.deserialize(value)
|
result[key] = self._config_value.deserialize(value)
|
||||||
except ValueError as e: # deserialization failed
|
except ValueError as e: # deserialization failed
|
||||||
|
result[key] = None
|
||||||
errors[key] = str(e)
|
errors[key] = str(e)
|
||||||
return result, errors
|
return result, errors
|
||||||
|
|
||||||
|
|||||||
@ -69,7 +69,7 @@ class ValidateTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_empty_config_single_schema(self):
|
def test_empty_config_single_schema(self):
|
||||||
conf, errors = config._validate({}, [self.schema])
|
conf, errors = config._validate({}, [self.schema])
|
||||||
self.assertEqual({}, conf)
|
self.assertEqual({'foo': {'bar': None}}, conf)
|
||||||
self.assertEqual({'foo': {'bar': 'config key not found.'}}, errors)
|
self.assertEqual({'foo': {'bar': 'config key not found.'}}, errors)
|
||||||
|
|
||||||
def test_config_single_schema(self):
|
def test_config_single_schema(self):
|
||||||
@ -83,7 +83,7 @@ class ValidateTest(unittest.TestCase):
|
|||||||
self.schema['bar'] = mock.Mock()
|
self.schema['bar'] = mock.Mock()
|
||||||
self.schema['bar'].deserialize.side_effect = ValueError('bad')
|
self.schema['bar'].deserialize.side_effect = ValueError('bad')
|
||||||
conf, errors = config._validate(raw_config, [self.schema])
|
conf, errors = config._validate(raw_config, [self.schema])
|
||||||
self.assertEqual({}, conf)
|
self.assertEqual({'foo': {'bar': None}}, conf)
|
||||||
self.assertEqual({'foo': {'bar': 'bad'}}, errors)
|
self.assertEqual({'foo': {'bar': 'bad'}}, errors)
|
||||||
|
|
||||||
# TODO: add more tests
|
# TODO: add more tests
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import mock
|
|||||||
|
|
||||||
from mopidy.config import schemas, types
|
from mopidy.config import schemas, types
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest, any_unicode
|
||||||
|
|
||||||
|
|
||||||
class ConfigSchemaTest(unittest.TestCase):
|
class ConfigSchemaTest(unittest.TestCase):
|
||||||
@ -41,30 +41,42 @@ class ConfigSchemaTest(unittest.TestCase):
|
|||||||
del self.values['foo']
|
del self.values['foo']
|
||||||
|
|
||||||
result, errors = self.schema.deserialize(self.values)
|
result, errors = self.schema.deserialize(self.values)
|
||||||
self.assertIn('not found', errors['foo'])
|
self.assertEqual({'foo': any_unicode}, errors)
|
||||||
self.assertItemsEqual(['bar', 'baz'], result.keys())
|
self.assertIsNone(result.pop('foo'))
|
||||||
|
self.assertIsNotNone(result.pop('bar'))
|
||||||
|
self.assertIsNotNone(result.pop('baz'))
|
||||||
|
self.assertEqual({}, result)
|
||||||
|
|
||||||
def test_deserialize_with_extra_value(self):
|
def test_deserialize_with_extra_value(self):
|
||||||
self.values['extra'] = '123'
|
self.values['extra'] = '123'
|
||||||
|
|
||||||
result, errors = self.schema.deserialize(self.values)
|
result, errors = self.schema.deserialize(self.values)
|
||||||
self.assertIn('unknown', errors['extra'])
|
self.assertEqual({'extra': any_unicode}, errors)
|
||||||
self.assertItemsEqual(['foo', 'bar', 'baz'], result.keys())
|
self.assertIsNotNone(result.pop('foo'))
|
||||||
|
self.assertIsNotNone(result.pop('bar'))
|
||||||
|
self.assertIsNotNone(result.pop('baz'))
|
||||||
|
self.assertEqual({}, result)
|
||||||
|
|
||||||
def test_deserialize_with_deserialization_error(self):
|
def test_deserialize_with_deserialization_error(self):
|
||||||
self.schema['foo'].deserialize.side_effect = ValueError('failure')
|
self.schema['foo'].deserialize.side_effect = ValueError('failure')
|
||||||
|
|
||||||
result, errors = self.schema.deserialize(self.values)
|
result, errors = self.schema.deserialize(self.values)
|
||||||
self.assertIn('failure', errors['foo'])
|
self.assertEqual({'foo': 'failure'}, errors)
|
||||||
self.assertItemsEqual(['bar', 'baz'], result.keys())
|
self.assertIsNone(result.pop('foo'))
|
||||||
|
self.assertIsNotNone(result.pop('bar'))
|
||||||
|
self.assertIsNotNone(result.pop('baz'))
|
||||||
|
self.assertEqual({}, result)
|
||||||
|
|
||||||
def test_deserialize_with_multiple_deserialization_errors(self):
|
def test_deserialize_with_multiple_deserialization_errors(self):
|
||||||
self.schema['foo'].deserialize.side_effect = ValueError('failure')
|
self.schema['foo'].deserialize.side_effect = ValueError('failure')
|
||||||
self.schema['bar'].deserialize.side_effect = ValueError('other')
|
self.schema['bar'].deserialize.side_effect = ValueError('other')
|
||||||
|
|
||||||
result, errors = self.schema.deserialize(self.values)
|
result, errors = self.schema.deserialize(self.values)
|
||||||
self.assertIn('failure', errors['foo'])
|
self.assertEqual({'foo': 'failure', 'bar': 'other'}, errors)
|
||||||
self.assertIn('other', errors['bar'])
|
self.assertIsNone(result.pop('foo'))
|
||||||
self.assertItemsEqual(['baz'], result.keys())
|
self.assertIsNone(result.pop('bar'))
|
||||||
|
self.assertIsNotNone(result.pop('baz'))
|
||||||
|
self.assertEqual({}, result)
|
||||||
|
|
||||||
def test_deserialize_deserialization_unknown_and_missing_errors(self):
|
def test_deserialize_deserialization_unknown_and_missing_errors(self):
|
||||||
self.values['extra'] = '123'
|
self.values['extra'] = '123'
|
||||||
@ -76,7 +88,11 @@ class ConfigSchemaTest(unittest.TestCase):
|
|||||||
self.assertNotIn('foo', errors)
|
self.assertNotIn('foo', errors)
|
||||||
self.assertIn('failure', errors['bar'])
|
self.assertIn('failure', errors['bar'])
|
||||||
self.assertIn('not found', errors['baz'])
|
self.assertIn('not found', errors['baz'])
|
||||||
self.assertItemsEqual(['foo'], result.keys())
|
|
||||||
|
self.assertNotIn('unknown', result)
|
||||||
|
self.assertIn('foo', result)
|
||||||
|
self.assertIsNone(result['bar'])
|
||||||
|
self.assertIsNone(result['baz'])
|
||||||
|
|
||||||
|
|
||||||
class ExtensionConfigSchemaTest(unittest.TestCase):
|
class ExtensionConfigSchemaTest(unittest.TestCase):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user