config: Remove format from types API

This commit is contained in:
Thomas Adamcik 2013-04-16 00:14:58 +02:00
parent 211379a01c
commit ee40f0385a
4 changed files with 23 additions and 31 deletions

View File

@ -96,7 +96,7 @@ class ConfigSchema(object):
value = values.get(key)
if value is not None:
lines.append('%s = %s' % (
key, self._schema[key].format(value)))
key, self._schema[key].serialize(value, display=True)))
return '\n'.join(lines)
@ -142,5 +142,5 @@ class LogLevelConfigSchema(object):
for key, value in sorted(values.items()):
if value is not None:
lines.append('%s = %s' % (
key, self._config_value.format(value)))
key, self._config_value.serialize(value, display=True)))
return '\n'.join(lines)

View File

@ -53,14 +53,10 @@ class ConfigValue(object):
"""Cast raw string to appropriate type."""
return value
def serialize(self, value):
def serialize(self, value, display=False):
"""Convert value back to string for saving."""
return bytes(value)
def format(self, value):
"""Format value for display."""
return self.serialize(value)
class String(ConfigValue):
"""String value.
@ -79,7 +75,7 @@ class String(ConfigValue):
return None
return value
def serialize(self, value):
def serialize(self, value, display=False):
if value is None:
return b''
return encode(value)
@ -101,16 +97,13 @@ class Secret(ConfigValue):
return None
return value
def serialize(self, value):
def serialize(self, value, display=False):
if value is None:
return b''
elif display:
return b'********'
return value
def format(self, value):
if value is None:
return b''
return b'********'
class Integer(ConfigValue):
"""Integer value."""
@ -147,7 +140,7 @@ class Boolean(ConfigValue):
return False
raise ValueError('invalid value for boolean: %r' % value)
def serialize(self, value):
def serialize(self, value, display=False):
if value:
return 'true'
else:
@ -173,7 +166,7 @@ class List(ConfigValue):
validators.validate_required(values, self._required)
return tuple(values)
def serialize(self, value):
def serialize(self, value, display=False):
return b'\n ' + b'\n '.join(encode(v) for v in value if v)
@ -208,7 +201,7 @@ class Hostname(ConfigValue):
def __init__(self, optional=False):
self._required = not optional
def deserialize(self, value):
def deserialize(self, value, display=False):
validators.validate_required(value, self._required)
if not value.strip():
return None
@ -259,7 +252,7 @@ class Path(ConfigValue):
return None
return ExpandedPath(value)
def serialize(self, value):
def serialize(self, value, display=False):
if isinstance(value, ExpandedPath):
return value.original
return value

View File

@ -17,18 +17,18 @@ class ConfigSchemaTest(unittest.TestCase):
self.values = {'bar': '123', 'foo': '456', 'baz': '678'}
def test_format(self):
self.schema['foo'].format.return_value = 'qwe'
self.schema['bar'].format.return_value = 'asd'
self.schema['baz'].format.return_value = 'zxc'
self.schema['foo'].serialize.return_value = 'qwe'
self.schema['bar'].serialize.return_value = 'asd'
self.schema['baz'].serialize.return_value = 'zxc'
expected = ['[test]', 'foo = qwe', 'bar = asd', 'baz = zxc']
result = self.schema.format(self.values)
self.assertEqual('\n'.join(expected), result)
def test_format_unkwown_value(self):
self.schema['foo'].format.return_value = 'qwe'
self.schema['bar'].format.return_value = 'asd'
self.schema['baz'].format.return_value = 'zxc'
self.schema['foo'].serialize.return_value = 'qwe'
self.schema['bar'].serialize.return_value = 'asd'
self.schema['baz'].serialize.return_value = 'zxc'
self.values['unknown'] = 'rty'
result = self.schema.format(self.values)

View File

@ -23,10 +23,9 @@ class ConfigValueTest(unittest.TestCase):
value = types.ConfigValue()
self.assertIsInstance(value.serialize(object()), bytes)
def test_format_uses_serialize(self):
def test_serialize_supports_display(self):
value = types.ConfigValue()
obj = object()
self.assertEqual(value.serialize(obj), value.format(obj))
self.assertIsInstance(value.serialize(object(), display=True), bytes)
class StringTest(unittest.TestCase):
@ -117,15 +116,15 @@ class SecretTest(unittest.TestCase):
self.assertIsInstance(result, bytes)
self.assertEqual(b'', result)
def test_format_masks_value(self):
def test_serialize_for_display_masks_value(self):
value = types.Secret()
result = value.format('s3cret')
result = value.serialize('s3cret', display=True)
self.assertIsInstance(result, bytes)
self.assertEqual(b'********', result)
def test_format_none(self):
def test_serialize_none_for_display(self):
value = types.Secret()
result = value.format(None)
result = value.serialize(None, display=True)
self.assertIsInstance(result, bytes)
self.assertEqual(b'', result)