config: Remove format from types API
This commit is contained in:
parent
211379a01c
commit
ee40f0385a
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user