summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-05 02:06:22 +0000
committerGerrit Code Review <review@openstack.org>2013-06-05 02:06:22 +0000
commitebecd7848336e3db35720bc49ec6604e8af656fb (patch)
tree48d8607eb48c743943cbee93fdca8a9bd8452b56
parentfda9f113ccd39711ae1ffe759838352080993169 (diff)
parent820135933168feeb6320a23555ca0ebf5e14fa08 (diff)
downloadnova-ebecd7848336e3db35720bc49ec6604e8af656fb.tar.gz
nova-ebecd7848336e3db35720bc49ec6604e8af656fb.tar.xz
nova-ebecd7848336e3db35720bc49ec6604e8af656fb.zip
Merge "Make instance object tolerate isotime strings"
-rw-r--r--nova/objects/base.py6
-rw-r--r--nova/objects/instance.py6
-rw-r--r--nova/objects/utils.py8
-rw-r--r--nova/tests/objects/test_objects.py8
4 files changed, 22 insertions, 6 deletions
diff --git a/nova/objects/base.py b/nova/objects/base.py
index abeebf990..0cfd08e6b 100644
--- a/nova/objects/base.py
+++ b/nova/objects/base.py
@@ -168,9 +168,9 @@ class NovaObject(object):
# by subclasses, but that is a special case. Objects inheriting from
# other objects will not receive this merging of fields contents.
fields = {
- 'created_at': obj_utils.datetime_or_none,
- 'updated_at': obj_utils.datetime_or_none,
- 'deleted_at': obj_utils.datetime_or_none,
+ 'created_at': obj_utils.datetime_or_str_or_none,
+ 'updated_at': obj_utils.datetime_or_str_or_none,
+ 'deleted_at': obj_utils.datetime_or_str_or_none,
}
def __init__(self):
diff --git a/nova/objects/instance.py b/nova/objects/instance.py
index 836d78c08..dbf9786df 100644
--- a/nova/objects/instance.py
+++ b/nova/objects/instance.py
@@ -58,9 +58,9 @@ class Instance(base.NovaObject):
'reservation_id': obj_utils.str_or_none,
- 'scheduled_at': obj_utils.datetime_or_none,
- 'launched_at': obj_utils.datetime_or_none,
- 'terminated_at': obj_utils.datetime_or_none,
+ 'scheduled_at': obj_utils.datetime_or_str_or_none,
+ 'launched_at': obj_utils.datetime_or_str_or_none,
+ 'terminated_at': obj_utils.datetime_or_str_or_none,
'availability_zone': obj_utils.str_or_none,
diff --git a/nova/objects/utils.py b/nova/objects/utils.py
index 042b7b36e..dd654045c 100644
--- a/nova/objects/utils.py
+++ b/nova/objects/utils.py
@@ -27,6 +27,14 @@ def datetime_or_none(dt):
raise ValueError('A datetime.datetime is required here')
+# NOTE(danms): Being tolerant of isotime strings here will help us
+# during our objects transition
+def datetime_or_str_or_none(val):
+ if isinstance(val, basestring):
+ return timeutils.parse_isotime(val)
+ return datetime_or_none(val)
+
+
def int_or_none(val):
"""Attempt to parse an integer value, or None."""
if val is None:
diff --git a/nova/tests/objects/test_objects.py b/nova/tests/objects/test_objects.py
index 754358230..cbaf8cb17 100644
--- a/nova/tests/objects/test_objects.py
+++ b/nova/tests/objects/test_objects.py
@@ -123,6 +123,14 @@ class TestUtils(test.TestCase):
self.assertEqual(utils.datetime_or_none(None), None)
self.assertRaises(ValueError, utils.datetime_or_none, 'foo')
+ def test_datetime_or_str_or_none(self):
+ dts = timeutils.isotime()
+ dt = timeutils.parse_isotime(dts)
+ self.assertEqual(utils.datetime_or_str_or_none(dt), dt)
+ self.assertEqual(utils.datetime_or_str_or_none(None), None)
+ self.assertEqual(utils.datetime_or_str_or_none(dts), dt)
+ self.assertRaises(ValueError, utils.datetime_or_str_or_none, 'foo')
+
def test_int_or_none(self):
self.assertEqual(utils.int_or_none(1), 1)
self.assertEqual(utils.int_or_none('1'), 1)