summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNataliia Uvarova <grafinya.uvarova@gmail.com>2014-05-29 12:39:42 +0200
committerNataliia Uvarova <grafinya.uvarova@gmail.com>2014-05-29 12:39:42 +0200
commit547453cac816e0821bbf69f7e40fd9dbad0af6e3 (patch)
tree84547ea1d45429d57d3dd4f351c2cccec07c4933
parent3e3772963f1ece519efb03be835b2df681c9b182 (diff)
downloadoslo-serialization-547453cac816e0821bbf69f7e40fd9dbad0af6e3.tar.gz
Add kwargs to jsonutils.load(s) functions
Now jsonutils.load(s) doesn't allow to pass additional params to underlying json.load(s) (such as 'parse_int' or 'cls'). This patch adds kwargs to jsonutils.load(s) that are passed to json.load(s). Change-Id: I9b032e6047b207ad3af14dadd90f207e3a9ca0e5
-rw-r--r--openstack/common/jsonutils.py8
-rw-r--r--tests/unit/test_jsonutils.py5
2 files changed, 9 insertions, 4 deletions
diff --git a/openstack/common/jsonutils.py b/openstack/common/jsonutils.py
index 1a35e04..e4eada8 100644
--- a/openstack/common/jsonutils.py
+++ b/openstack/common/jsonutils.py
@@ -168,12 +168,12 @@ def dumps(value, default=to_primitive, **kwargs):
return json.dumps(value, default=default, **kwargs)
-def loads(s, encoding='utf-8'):
- return json.loads(strutils.safe_decode(s, encoding))
+def loads(s, encoding='utf-8', **kwargs):
+ return json.loads(strutils.safe_decode(s, encoding), **kwargs)
-def load(fp, encoding='utf-8'):
- return json.load(codecs.getreader(encoding)(fp))
+def load(fp, encoding='utf-8', **kwargs):
+ return json.load(codecs.getreader(encoding)(fp), **kwargs)
try:
diff --git a/tests/unit/test_jsonutils.py b/tests/unit/test_jsonutils.py
index 90931a0..208c284 100644
--- a/tests/unit/test_jsonutils.py
+++ b/tests/unit/test_jsonutils.py
@@ -58,6 +58,11 @@ class JSONUtilsTestMixin(object):
i18n_str = i18n_str_unicode.encode('utf-8')
self.assertIsInstance(jsonutils.loads(i18n_str), six.text_type)
+ def test_loads_with_kwargs(self):
+ jsontext = u'{"foo": 3}'
+ result = jsonutils.loads(jsontext, parse_int=lambda x: 5)
+ self.assertEqual(5, result['foo'])
+
def test_load(self):
jsontext = u'{"a": "\u0442\u044d\u0441\u0442"}'