config: Convert the loglevel schema to a generic map schema

This commit is contained in:
Thomas Adamcik 2015-02-25 21:28:05 +01:00
parent 7520b13aa1
commit b11d89d72f
3 changed files with 12 additions and 13 deletions

View File

@ -22,7 +22,7 @@ _logging_schema['debug_format'] = String()
_logging_schema['debug_file'] = Path()
_logging_schema['config_file'] = Path(optional=True)
_loglevels_schema = LogLevelConfigSchema('loglevels')
_loglevels_schema = MapConfigSchema('loglevels', LogLevel())
_audio_schema = ConfigSchema('audio')
_audio_schema['mixer'] = String()

View File

@ -94,17 +94,16 @@ class ConfigSchema(collections.OrderedDict):
return result
class LogLevelConfigSchema(object):
"""Special cased schema for handling a config section with loglevels.
class MapConfigSchema(object):
"""Special cased schema for handling mulitple keys with the same type.
Expects the config keys to be logger names and the values to be log levels
as understood by the :class:`LogLevel` config value. Does not sub-class
:class:`ConfigSchema`, but implements the same serialize/deserialize
interface.
Does not sub-class :class:`ConfigSchema`, but implements the same
serialize/deserialize interface.
"""
def __init__(self, name):
def __init__(self, name, value_type):
self.name = name
self._config_value = types.LogLevel()
self._value_type = value_type
def deserialize(self, values):
errors = {}
@ -112,7 +111,7 @@ class LogLevelConfigSchema(object):
for key, value in values.items():
try:
result[key] = self._config_value.deserialize(value)
result[key] = self._value_type.deserialize(value)
except ValueError as e: # deserialization failed
result[key] = None
errors[key] = str(e)
@ -121,5 +120,5 @@ class LogLevelConfigSchema(object):
def serialize(self, values, display=False):
result = collections.OrderedDict()
for key in sorted(values.keys()):
result[key] = self._config_value.serialize(values[key], display)
result[key] = self._value_type.serialize(values[key], display)
return result

View File

@ -86,9 +86,9 @@ class ConfigSchemaTest(unittest.TestCase):
self.assertNotIn('foo', errors)
class LogLevelConfigSchemaTest(unittest.TestCase):
class MapConfigSchemaTest(unittest.TestCase):
def test_conversion(self):
schema = schemas.LogLevelConfigSchema('test')
schema = schemas.MapConfigSchema('test', types.LogLevel())
result, errors = schema.deserialize(
{'foo.bar': 'DEBUG', 'baz': 'INFO'})