Revision 02141fb1
b/lib/serializer.py | ||
---|---|---|
42 | 42 |
_RE_EOLSP = re.compile('[ \t]+$', re.MULTILINE) |
43 | 43 |
|
44 | 44 |
|
45 |
def _GetJsonDumpers(): |
|
45 |
def _GetJsonDumpers(_encoder_class=simplejson.JSONEncoder):
|
|
46 | 46 |
"""Returns two JSON functions to serialize data. |
47 | 47 |
|
48 | 48 |
@rtype: (callable, callable) |
... | ... | |
50 | 50 |
generate a more readable, indented form of JSON (if supported) |
51 | 51 |
|
52 | 52 |
""" |
53 |
plain_dump = simplejson.dumps
|
|
53 |
plain_encoder = _encoder_class(sort_keys=True)
|
|
54 | 54 |
|
55 | 55 |
# Check whether the simplejson module supports indentation |
56 | 56 |
try: |
57 |
simplejson.dumps(1, indent=_JSON_INDENT)
|
|
57 |
indent_encoder = _encoder_class(indent=_JSON_INDENT, sort_keys=True)
|
|
58 | 58 |
except TypeError: |
59 | 59 |
# Indentation not supported |
60 |
indent_dump = plain_dump |
|
61 |
else: |
|
62 |
# Indentation supported |
|
63 |
indent_dump = lambda data: simplejson.dumps(data, indent=_JSON_INDENT) |
|
64 |
|
|
65 |
assert callable(plain_dump) |
|
66 |
assert callable(indent_dump) |
|
60 |
indent_encoder = plain_encoder |
|
67 | 61 |
|
68 |
return (plain_dump, indent_dump)
|
|
62 |
return (plain_encoder.encode, indent_encoder.encode)
|
|
69 | 63 |
|
70 | 64 |
|
71 | 65 |
(_DumpJson, _DumpJsonIndent) = _GetJsonDumpers() |
b/test/ganeti.serializer_unittest.py | ||
---|---|---|
52 | 52 |
] |
53 | 53 |
|
54 | 54 |
def _TestSerializer(self, dump_fn, load_fn): |
55 |
for data in self._TESTDATA: |
|
56 |
self.failUnless(dump_fn(data).endswith("\n")) |
|
57 |
self.assertEqualValues(load_fn(dump_fn(data)), data) |
|
55 |
for indent in [True, False]: |
|
56 |
for data in self._TESTDATA: |
|
57 |
self.failUnless(dump_fn(data, indent=indent).endswith("\n")) |
|
58 |
self.assertEqualValues(load_fn(dump_fn(data, indent=indent)), data) |
|
58 | 59 |
|
59 | 60 |
def testGeneric(self): |
60 |
return self._TestSerializer(serializer.Dump, serializer.Load)
|
|
61 |
self._TestSerializer(serializer.Dump, serializer.Load) |
|
61 | 62 |
|
62 | 63 |
def testJson(self): |
63 |
return self._TestSerializer(serializer.DumpJson, serializer.LoadJson) |
|
64 |
self._TestSerializer(serializer.DumpJson, serializer.LoadJson) |
|
65 |
|
|
66 |
def testJsonIndent(self): |
|
67 |
data = { |
|
68 |
"k1": 1, |
|
69 |
"k2": 3, |
|
70 |
"k3": 4, |
|
71 |
} |
|
72 |
self.assert_(len(serializer.DumpJson(data, indent=True).splitlines()) > 3) |
|
64 | 73 |
|
65 | 74 |
def testSignedMessage(self): |
66 | 75 |
LoadSigned = serializer.LoadSigned |
Also available in: Unified diff