config: Convert the loglevel schema to a generic map schema
This commit is contained in:
parent
7520b13aa1
commit
b11d89d72f
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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'})
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user