From 414e1457632b5eea82274ad8694d2b324d4e200e Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Tue, 4 Jun 2013 14:43:16 -0700 Subject: 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 --- nova/objects/utils.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'nova/objects') 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') -- cgit