# C0103: Invalid name, since pylint doesn't see that Dump points to a
# function and not a constant
-_OLD_SIMPLEJSON = False
-
-try:
- import json
-except ImportError:
- # The "json" module was only added in Python 2.6. Earlier versions must use
- # the separate "simplejson" module.
- import simplejson as json
- _OLD_SIMPLEJSON = True
-
+import simplejson
import re
-import logging
from ganeti import errors
from ganeti import utils
_RE_EOLSP = re.compile("[ \t]+$", re.MULTILINE)
-class _CustomJsonEncoder(json.JSONEncoder):
- if __debug__ and not _OLD_SIMPLEJSON:
- try:
- _orig_fn = json.JSONEncoder._iterencode_dict
- except AttributeError:
- raise Exception("Can't override JSONEncoder's '_iterencode_dict'")
- else:
- def _iterencode_dict(self, data, *args, **kwargs):
- for key in data.keys():
- if not (key is None or isinstance(key, (basestring, bool))):
- raise ValueError("Key '%s' is of disallowed type '%s'" %
- (key, type(key)))
-
- return self._orig_fn(data, *args, **kwargs)
-
-
-def _GetJsonDumpers(_encoder_class=_CustomJsonEncoder):
+def _GetJsonDumpers(_encoder_class=simplejson.JSONEncoder):
"""Returns two JSON functions to serialize data.
@rtype: (callable, callable)
@return: the original data
"""
- return json.loads(txt)
+ return simplejson.loads(txt)
def DumpSignedJson(data, key, salt=None, key_selector=None):
import unittest
-import warnings
from ganeti import serializer
from ganeti import errors
-from ganeti import compat
import testutils
serializer.DumpJson(tdata), "mykey")
-class TestInvalidDictionaryKey(unittest.TestCase):
- def _Test(self, data):
- if serializer._OLD_SIMPLEJSON:
- # Using old "simplejson", can't really test
- warnings.warn("This test requires Python 2.6 or above to function"
- " correctly")
- self.assertTrue(serializer.DumpJson(data))
- else:
- self.assertRaises(ValueError, serializer.DumpJson, data)
-
- def test(self):
- for value in [123, 1.1, -1, -9492.1123, -3234e-4]:
- self._Test({value: ""})
-
- def testAllowed(self):
- for value in ["", "Hello World", None, True, False]:
- self.assertTrue(serializer.DumpJson({value: ""}))
-
-
if __name__ == '__main__':
testutils.GanetiTestProgram()