From 07ba0dc64474dd66b87bbd3649fe6d3026cfaf80 Mon Sep 17 00:00:00 2001 From: chenghuiyu Date: Thu, 7 Sep 2017 09:42:13 +0800 Subject: [PATCH] Utils: fix usage of iso8601_from_timestamp The commit Ib384ae8130dcc6cbd47a837d11ca171ce02ef29e replaced oslo_utils.timeutils.isotime, As oslo_utils.timeutils.isotime() is deprecated in version '1.6'. So the workaround is to copy the current implementation from oslo_utils.timeutils.isotime() to utils.py. However, oslo_utils.timeutils.iso8601_from_timestamp is also deprecated in version '1.6' and will be removed in a future version. So the workaround is to copy the current implementation from oslo_utils.timeutils.iso8601_from_timestamp() to utils.py For more informations: https://docs.openstack.org/oslo.utils/latest/reference/timeutils.html Change-Id: Iaea0465527329ac4253828fab88998de8eafc031 Partial-Bug: #1715325 --- cloudkitty/utils.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/cloudkitty/utils.py b/cloudkitty/utils.py index 4b865284..3ab25b68 100644 --- a/cloudkitty/utils.py +++ b/cloudkitty/utils.py @@ -106,6 +106,27 @@ def isotime(at=None, subsecond=False): return st +def iso8601_from_timestamp(timestamp, microsecond=False): + """Returns an iso8601 formatted date from timestamp""" + + # Python provides a similar instance method for datetime.datetime + # objects called isoformat() and utcfromtimestamp(). The format + # of the strings generated by isoformat() and utcfromtimestamp() + # have a couple of problems: + # 1) The method iso8601_from_timestamp in oslo_utils is realized + # by isotime, the strings generated by isotime are used in + # tokens and other public APIs that we can't change without a + # deprecation period. The strings generated by isoformat are + # not the same format, so we can't just change to it. + # 2) The strings generated by isoformat() and utcfromtimestamp() + # do not include the microseconds if the value happens to be 0. + # This will likely show up as random failures as parsers may be + # written to always expect microseconds, and it will parse + # correctly most of the time. + + return isotime(datetime.datetime.utcfromtimestamp(timestamp), microsecond) + + def dt2ts(orig_dt): """Translate a datetime into a timestamp.""" return calendar.timegm(orig_dt.timetuple()) @@ -129,7 +150,7 @@ def ts2iso(timestamp): """timestamp to is8601 format.""" if not isinstance(timestamp, float): timestamp = float(timestamp) - return timeutils.iso8601_from_timestamp(timestamp) + return iso8601_from_timestamp(timestamp) def dt2iso(orig_dt):