Commit cdeda3b6 authored by Michael Hanselmann's avatar Michael Hanselmann
Browse files

Revert "Fail if dictionary uses invalid keys" and "Support newer “json” module"

This reverts commit fd0351ae and

. The built-in module is a lot
slower in Python 2.6.
Signed-off-by: default avatarMichael Hanselmann <>
Reviewed-by: default avatarIustin Pop <>
parent fd0351ae
......@@ -29,18 +29,8 @@ backend (currently json).
# C0103: Invalid name, since pylint doesn't see that Dump points to a
# function and not a constant
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
import simplejson
import re
import logging
from ganeti import errors
from ganeti import utils
......@@ -51,23 +41,7 @@ _JSON_INDENT = 2
_RE_EOLSP = re.compile("[ \t]+$", re.MULTILINE)
class _CustomJsonEncoder(json.JSONEncoder):
if __debug__ and not _OLD_SIMPLEJSON:
_orig_fn = json.JSONEncoder._iterencode_dict
except AttributeError:
raise Exception("Can't override JSONEncoder's '_iterencode_dict'")
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)
......@@ -119,7 +93,7 @@ def LoadJson(txt):
@return: the original data
return json.loads(txt)
return simplejson.loads(txt)
def DumpSignedJson(data, key, salt=None, key_selector=None):
......@@ -23,11 +23,9 @@
import unittest
import warnings
from ganeti import serializer
from ganeti import errors
from ganeti import compat
import testutils
......@@ -109,24 +107,5 @@ class TestSerializer(testutils.GanetiTestCase):
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.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__':
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment