From 12e663a8b0b253970e3bccd373d3d2f3d462f6b6 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Mon, 16 Jul 2012 12:20:44 -0400 Subject: 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 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 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 --- nova/openstack/common/jsonutils.py | 10 ++++++++-- nova/tests/api/openstack/fakes.py | 2 +- nova/tests/api/openstack/volume/test_volumes.py | 20 ++++++++++---------- 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) -- cgit