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