summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Bryant <rbryant@redhat.com>2012-07-16 12:20:44 -0400
committerRussell Bryant <rbryant@redhat.com>2012-07-16 13:51:37 -0400
commit12e663a8b0b253970e3bccd373d3d2f3d462f6b6 (patch)
tree4d942c3490e312d809ccd4f5a69fb74d79a4b28d
parent9f33802364887dd22e7e87e329f51452650b1edd (diff)
downloadnova-12e663a8b0b253970e3bccd373d3d2f3d462f6b6.tar.gz
nova-12e663a8b0b253970e3bccd373d3d2f3d462f6b6.tar.xz
nova-12e663a8b0b253970e3bccd373d3d2f3d462f6b6.zip
Sync jsonutils from openstack-common.
In addition to the following changes from openstack-common, this patch includes some tweak to nova unit tests. timeutils.strtime() will raise an exception if the year in a datetime object is before 1900. Changes from openstack-common: commit ce3071437d1871f77c4d8573cbe5f4ea8c817650 Author: Russell Bryant <rbryant@redhat.com> Date: Mon Jul 16 10:30:25 2012 -0400 Use strtime() in to_primitive() for datetime objs. This patch updates jsonutils.to_primitive() to use timeutils.strtime() to convert a datimetime object to a string instead of just using str(). This ensures that we can easily convert the string back to a datetime using timeutils.parse_strtime(). Required for the nova blueprint no-db-messaging. commit 4c9d439ef24f5afdd74aa9153aa8fc772051e6cb Author: Tim Daly Jr <timjr@yahoo-inc.com> Date: Tue Jun 26 02:48:42 2012 +0000 Add 'filedecoder' method to the jsonutils wrapper module. Fixes bug #1017765 After version 3.3.2, the anyjson library will throw a KeyError if filedecoder isn't present. The filedecoder is just like the decoder except it takes a file instead of a string, like json.load() instead of json.loads(). Change-Id: Ib51f0da8641c035371e09047de9abe3cb83203e9
-rw-r--r--nova/openstack/common/jsonutils.py10
-rw-r--r--nova/tests/api/openstack/fakes.py2
-rw-r--r--nova/tests/api/openstack/volume/test_volumes.py20
3 files changed, 19 insertions, 13 deletions
diff --git a/nova/openstack/common/jsonutils.py b/nova/openstack/common/jsonutils.py
index 752266981..5f6a7edab 100644
--- a/nova/openstack/common/jsonutils.py
+++ b/nova/openstack/common/jsonutils.py
@@ -39,6 +39,8 @@ import itertools
import json
import xmlrpclib
+from nova.openstack.common import timeutils
+
def to_primitive(value, convert_instances=False, level=0):
"""Convert a complex object into primitives.
@@ -101,7 +103,7 @@ def to_primitive(value, convert_instances=False, level=0):
level=level)
return o
elif isinstance(value, datetime.datetime):
- return str(value)
+ return timeutils.strtime(value)
elif hasattr(value, 'iteritems'):
return to_primitive(dict(value.iteritems()),
convert_instances=convert_instances,
@@ -130,11 +132,15 @@ def loads(s):
return json.loads(s)
+def load(s):
+ return json.load(s)
+
+
try:
import anyjson
except ImportError:
pass
else:
anyjson._modules.append((__name__, 'dumps', TypeError,
- 'loads', ValueError))
+ 'loads', ValueError, 'load'))
anyjson.force_implementation(__name__)
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index bbb4b6628..20e675a8c 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -494,7 +494,7 @@ def stub_volume(id, **kwargs):
'name': 'vol name',
'display_name': 'displayname',
'display_description': 'displaydesc',
- 'created_at': datetime.datetime(1, 1, 1, 1, 1, 1),
+ 'created_at': datetime.datetime(1999, 1, 1, 1, 1, 1),
'snapshot_id': None,
'volume_type_id': 'fakevoltype',
'volume_metadata': [],
diff --git a/nova/tests/api/openstack/volume/test_volumes.py b/nova/tests/api/openstack/volume/test_volumes.py
index d4531ee28..0d671dfde 100644
--- a/nova/tests/api/openstack/volume/test_volumes.py
+++ b/nova/tests/api/openstack/volume/test_volumes.py
@@ -60,8 +60,8 @@ class VolumeApiTest(test.TestCase):
'snapshot_id': None,
'metadata': {},
'id': '1',
- 'created_at': datetime.datetime(1, 1, 1,
- 1, 1, 1),
+ 'created_at': datetime.datetime(1999, 1, 1,
+ 1, 1, 1),
'size': 100}}
self.assertEqual(res_dict, expected)
@@ -88,8 +88,8 @@ class VolumeApiTest(test.TestCase):
'snapshot_id': None,
'metadata': {},
'id': '1',
- 'created_at': datetime.datetime(1, 1, 1,
- 1, 1, 1),
+ 'created_at': datetime.datetime(1999, 1, 1,
+ 1, 1, 1),
'size': 1}]}
self.maxDiff = None
self.assertEqual(res_dict, expected)
@@ -109,8 +109,8 @@ class VolumeApiTest(test.TestCase):
'snapshot_id': None,
'metadata': {},
'id': '1',
- 'created_at': datetime.datetime(1, 1, 1,
- 1, 1, 1),
+ 'created_at': datetime.datetime(1999, 1, 1,
+ 1, 1, 1),
'size': 1}]}
self.assertEqual(res_dict, expected)
@@ -129,8 +129,8 @@ class VolumeApiTest(test.TestCase):
'snapshot_id': None,
'metadata': {},
'id': '1',
- 'created_at': datetime.datetime(1, 1, 1,
- 1, 1, 1),
+ 'created_at': datetime.datetime(1999, 1, 1,
+ 1, 1, 1),
'size': 1}}
self.assertEqual(res_dict, expected)
@@ -151,8 +151,8 @@ class VolumeApiTest(test.TestCase):
'snapshot_id': None,
'metadata': {},
'id': '1',
- 'created_at': datetime.datetime(1, 1, 1,
- 1, 1, 1),
+ 'created_at': datetime.datetime(1999, 1, 1,
+ 1, 1, 1),
'size': 1}}
self.assertEqual(res_dict, expected)