diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-06-05 02:06:22 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-06-05 02:06:22 +0000 |
commit | ebecd7848336e3db35720bc49ec6604e8af656fb (patch) | |
tree | 48d8607eb48c743943cbee93fdca8a9bd8452b56 | |
parent | fda9f113ccd39711ae1ffe759838352080993169 (diff) | |
parent | 820135933168feeb6320a23555ca0ebf5e14fa08 (diff) | |
download | nova-ebecd7848336e3db35720bc49ec6604e8af656fb.tar.gz nova-ebecd7848336e3db35720bc49ec6604e8af656fb.tar.xz nova-ebecd7848336e3db35720bc49ec6604e8af656fb.zip |
Merge "Make instance object tolerate isotime strings"
-rw-r--r-- | nova/objects/base.py | 6 | ||||
-rw-r--r-- | nova/objects/instance.py | 6 | ||||
-rw-r--r-- | nova/objects/utils.py | 8 | ||||
-rw-r--r-- | nova/tests/objects/test_objects.py | 8 |
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) |