summaryrefslogtreecommitdiffstats
path: root/nova/objects
diff options
context:
space:
mode:
authorDan Smith <danms@us.ibm.com>2013-06-04 14:43:16 -0700
committerDan Smith <danms@us.ibm.com>2013-06-05 12:46:31 -0700
commit414e1457632b5eea82274ad8694d2b324d4e200e (patch)
tree962d1539a6ede565475f0beaafdb1e449069b852 /nova/objects
parent5d9cb7dd354dc1a1eae9985521c0f4b2ea4d876e (diff)
downloadnova-414e1457632b5eea82274ad8694d2b324d4e200e.tar.gz
nova-414e1457632b5eea82274ad8694d2b324d4e200e.tar.xz
nova-414e1457632b5eea82274ad8694d2b324d4e200e.zip
Make the datetime utility function coerce to UTC
Getting datetime objects from existing sources (i.e. sqlalchemy) is problematic because they're "timezone naive". Make the utility function coerce these to UTC for easier conversion. Related to blueprint unified-object-model Change-Id: I61bc6b13f9bd9441d64cc6930e43e921af72a342
Diffstat (limited to 'nova/objects')
-rw-r--r--nova/objects/utils.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/nova/objects/utils.py b/nova/objects/utils.py
index dd654045c..21ef6faeb 100644
--- a/nova/objects/utils.py
+++ b/nova/objects/utils.py
@@ -15,6 +15,7 @@
"""Utility methods for objects"""
import datetime
+import iso8601
import netaddr
from nova.openstack.common import timeutils
@@ -22,8 +23,16 @@ from nova.openstack.common import timeutils
def datetime_or_none(dt):
"""Validate a datetime or None value."""
- if dt is None or isinstance(dt, datetime.datetime):
- return dt
+ if dt is None:
+ return None
+ elif isinstance(dt, datetime.datetime):
+ if dt.utcoffset() is None:
+ # NOTE(danms): Legacy objects from sqlalchemy are stored in UTC,
+ # but are returned without a timezone attached.
+ # As a transitional aid, assume a tz-naive object is in UTC.
+ return dt.replace(tzinfo=iso8601.iso8601.Utc())
+ else:
+ return dt
raise ValueError('A datetime.datetime is required here')