diff options
author | Ken Pepple <ken.pepple@gmail.com> | 2011-02-22 16:10:19 +0000 |
---|---|---|
committer | Tarmac <> | 2011-02-22 16:10:19 +0000 |
commit | c5a98e3e64ae5af34f63faf2d1664f5bdfb253af (patch) | |
tree | c609267c6da258ae6695ddd3238e0ecf92d37dae | |
parent | f9f9bf52f50604afa05fdd7300601f28d7b441c0 (diff) | |
parent | 7f0e78ea37d254ef36ea62c13336989094440bf3 (diff) | |
download | nova-c5a98e3e64ae5af34f63faf2d1664f5bdfb253af.tar.gz nova-c5a98e3e64ae5af34f63faf2d1664f5bdfb253af.tar.xz nova-c5a98e3e64ae5af34f63faf2d1664f5bdfb253af.zip |
no, really fix lp721297 this time
-rw-r--r-- | nova/api/ec2/apirequest.py | 8 | ||||
-rw-r--r-- | nova/tests/test_api.py | 23 |
2 files changed, 30 insertions, 1 deletions
diff --git a/nova/api/ec2/apirequest.py b/nova/api/ec2/apirequest.py index 00b527d62..2b1acba5a 100644 --- a/nova/api/ec2/apirequest.py +++ b/nova/api/ec2/apirequest.py @@ -46,6 +46,11 @@ def _underscore_to_xmlcase(str): return res[:1].lower() + res[1:] +def _database_to_isoformat(datetimeobj): + """Return a xs:dateTime parsable string from datatime""" + return datetimeobj.strftime("%Y-%m-%dT%H:%M:%SZ") + + def _try_convert(value): """Return a non-string if possible""" if value == 'None': @@ -173,7 +178,8 @@ class APIRequest(object): elif isinstance(data, bool): data_el.appendChild(xml.createTextNode(str(data).lower())) elif isinstance(data, datetime.datetime): - data_el.appendChild(xml.createTextNode(data.isoformat())) + data_el.appendChild( + xml.createTextNode(_database_to_isoformat(data))) elif data != None: data_el.appendChild(xml.createTextNode(str(data))) diff --git a/nova/tests/test_api.py b/nova/tests/test_api.py index fa27825cd..d5c54a1c3 100644 --- a/nova/tests/test_api.py +++ b/nova/tests/test_api.py @@ -20,6 +20,7 @@ import boto from boto.ec2 import regioninfo +import datetime import httplib import random import StringIO @@ -127,6 +128,28 @@ class ApiEc2TestCase(test.TestCase): self.ec2.new_http_connection(host, is_secure).AndReturn(self.http) return self.http + def test_return_valid_isoformat(self): + """ + Ensure that the ec2 api returns datetime in xs:dateTime + (which apparently isn't datetime.isoformat()) + NOTE(ken-pepple): https://bugs.launchpad.net/nova/+bug/721297 + """ + conv = apirequest._database_to_isoformat + # sqlite database representation with microseconds + time_to_convert = datetime.datetime.strptime( + "2011-02-21 20:14:10.634276", + "%Y-%m-%d %H:%M:%S.%f") + self.assertEqual( + conv(time_to_convert), + '2011-02-21T20:14:10Z') + # mysqlite database representation + time_to_convert = datetime.datetime.strptime( + "2011-02-21 19:56:18", + "%Y-%m-%d %H:%M:%S") + self.assertEqual( + conv(time_to_convert), + '2011-02-21T19:56:18Z') + def test_xmlns_version_matches_request_version(self): self.expect_http(api_version='2010-10-30') self.mox.ReplayAll() |