From b11d89d72fc3f69028d3a1499753d1853f4f8660 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Wed, 25 Feb 2015 21:28:05 +0100 Subject: [PATCH] config: Convert the loglevel schema to a generic map schema --- mopidy/config/__init__.py | 2 +- mopidy/config/schemas.py | 19 +++++++++---------- tests/config/test_schemas.py | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/mopidy/config/__init__.py b/mopidy/config/__init__.py index 885ea3a6..a6cb9d94 100644 --- a/mopidy/config/__init__.py +++ b/mopidy/config/__init__.py @@ -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() diff --git a/mopidy/config/schemas.py b/mopidy/config/schemas.py index 56826a53..f1b3a8c1 100644 --- a/mopidy/config/schemas.py +++ b/mopidy/config/schemas.py @@ -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 diff --git a/tests/config/test_schemas.py b/tests/config/test_schemas.py index 8412b899..502bf61c 100644 --- a/tests/config/test_schemas.py +++ b/tests/config/test_schemas.py @@ -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'})