summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2015-03-23 15:47:05 +0100
committerJulien Danjou <julien@danjou.info>2015-05-13 12:11:12 +0200
commit5b0827a3df584b3e26bb44e5358cc28ac4a91636 (patch)
tree67c1d8e32dfd11d8b07a139ebbfd23982180e679
parent42b355f10dd011161e6d859f4a2f99030cc4213a (diff)
downloadoslo-serialization-5b0827a3df584b3e26bb44e5358cc28ac4a91636.tar.gz
jsonutils: replace strtime() usage with isoformat()
Following discussion in change I8b5119e64369ccac3423dccc04421f99912df733 in oslo.utils, we plan to deprecated and remove strtime() which is to be considered dangerous. This changes the json serialization code to embed the timezone in the encoded datetime string if it's available. Change-Id: I262391987d25b483d2bec4ac3abe94b6e9d032ad
-rw-r--r--oslo_serialization/jsonutils.py5
-rw-r--r--oslo_serialization/tests/test_jsonutils.py9
-rw-r--r--tests/test_jsonutils.py2
3 files changed, 11 insertions, 5 deletions
diff --git a/oslo_serialization/jsonutils.py b/oslo_serialization/jsonutils.py
index eca6eb2..f2d7f1a 100644
--- a/oslo_serialization/jsonutils.py
+++ b/oslo_serialization/jsonutils.py
@@ -57,7 +57,6 @@ else:
from oslo_utils import encodeutils
from oslo_utils import importutils
-from oslo_utils import timeutils
import six
import six.moves.xmlrpc_client as xmlrpclib
@@ -105,7 +104,7 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
if isinstance(value, datetime.datetime):
if convert_datetime:
- return timeutils.strtime(value)
+ return value.isoformat()
else:
return value
@@ -146,7 +145,7 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
value = datetime.datetime(*tuple(value.timetuple())[:6])
if convert_datetime and isinstance(value, datetime.datetime):
- return timeutils.strtime(value)
+ return value.isoformat()
elif hasattr(value, 'iteritems'):
return recursive(dict(value.iteritems()), level=level + 1)
elif hasattr(value, '__iter__'):
diff --git a/oslo_serialization/tests/test_jsonutils.py b/oslo_serialization/tests/test_jsonutils.py
index 9709cb6..18bdc36 100644
--- a/oslo_serialization/tests/test_jsonutils.py
+++ b/oslo_serialization/tests/test_jsonutils.py
@@ -17,6 +17,7 @@ import collections
import datetime
import json
+import iso8601
import mock
import netaddr
from oslo_i18n import fixture
@@ -135,6 +136,12 @@ class ToPrimitiveTestCase(test_base.BaseTestCase):
self.assertEqual(jsonutils.to_primitive(x),
'1920-02-03T04:05:06.000007')
+ def test_datetime_timezone(self):
+ x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7,
+ tzinfo=iso8601.iso8601.UTC)
+ self.assertEqual(jsonutils.to_primitive(x),
+ '1920-02-03T04:05:06.000007+00:00')
+
def test_datetime_preserve(self):
x = datetime.datetime(1920, 2, 3, 4, 5, 6, 7)
self.assertEqual(jsonutils.to_primitive(x, convert_datetime=False), x)
@@ -143,7 +150,7 @@ class ToPrimitiveTestCase(test_base.BaseTestCase):
x = xmlrpclib.DateTime()
x.decode("19710203T04:05:06")
self.assertEqual(jsonutils.to_primitive(x),
- '1971-02-03T04:05:06.000000')
+ '1971-02-03T04:05:06')
def test_iter(self):
class IterClass(object):
diff --git a/tests/test_jsonutils.py b/tests/test_jsonutils.py
index e41b66e..e9567df 100644
--- a/tests/test_jsonutils.py
+++ b/tests/test_jsonutils.py
@@ -161,7 +161,7 @@ class ToPrimitiveTestCase(test_base.BaseTestCase):
x = xmlrpclib.DateTime()
x.decode("19710203T04:05:06")
self.assertEqual(jsonutils.to_primitive(x),
- '1971-02-03T04:05:06.000000')
+ '1971-02-03T04:05:06')
def test_iter(self):
class IterClass(object):