summaryrefslogtreecommitdiffstats
path: root/openstack/common
diff options
context:
space:
mode:
authorZhongyue Luo <lzyeval@gmail.com>2012-06-06 17:51:07 +0800
committerZhongyue Luo <lzyeval@gmail.com>2012-06-06 21:33:01 +0800
commite67d7775a7a3347c795a5ff3ed8166f850b8598e (patch)
tree40200e63126477e7e2e46488dc596d8205db3565 /openstack/common
parentc1f45745e240f9cc0d4e6522a71a895471aa94b3 (diff)
downloadoslo-e67d7775a7a3347c795a5ff3ed8166f850b8598e.tar.gz
oslo-e67d7775a7a3347c795a5ff3ed8166f850b8598e.tar.xz
oslo-e67d7775a7a3347c795a5ff3ed8166f850b8598e.zip
Add nova time util functions to timeutils
Fixes bug #1009410 1. Add the following functions from nova/utils.py - strtime - parse_strtime - is_older_than - utcnow_ts - advance_time_delta - advance_time_seconds 2. Write unittests in tests/unit/test_timeutils.py Change-Id: Ie0bba90833e2ed31bb5ab867a7c1a76a9901cacb
Diffstat (limited to 'openstack/common')
-rw-r--r--openstack/common/timeutils.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/openstack/common/timeutils.py b/openstack/common/timeutils.py
index 345f315..a7b2ce3 100644
--- a/openstack/common/timeutils.py
+++ b/openstack/common/timeutils.py
@@ -20,11 +20,13 @@ Time related utilities and helper functions.
"""
import datetime
+import time
import iso8601
TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
+PERFECT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f"
def isotime(at=None):
@@ -47,12 +49,34 @@ def parse_isotime(timestr):
raise ValueError(e.message)
+def strtime(at=None, fmt=PERFECT_TIME_FORMAT):
+ """Returns formatted utcnow."""
+ if not at:
+ at = utcnow()
+ return at.strftime(fmt)
+
+
+def parse_strtime(timestr, fmt=PERFECT_TIME_FORMAT):
+ """Turn a formatted time back into a datetime."""
+ return datetime.datetime.strptime(timestr, fmt)
+
+
def normalize_time(timestamp):
"""Normalize time in arbitrary timezone to UTC"""
offset = timestamp.utcoffset()
return timestamp.replace(tzinfo=None) - offset if offset else timestamp
+def is_older_than(before, seconds):
+ """Return True if before is older than seconds."""
+ return utcnow() - before > datetime.timedelta(seconds=seconds)
+
+
+def utcnow_ts():
+ """Timestamp version of our utcnow function."""
+ return time.mktime(utcnow().timetuple())
+
+
def utcnow():
"""Overridable version of utils.utcnow."""
if utcnow.override_time:
@@ -68,6 +92,17 @@ def set_time_override(override_time=datetime.datetime.utcnow()):
utcnow.override_time = override_time
+def advance_time_delta(timedelta):
+ """Advance overriden time using a datetime.timedelta."""
+ assert(not utcnow.override_time is None)
+ utcnow.override_time += timedelta
+
+
+def advance_time_seconds(seconds):
+ """Advance overriden time by seconds."""
+ advance_time_delta(datetime.timedelta(0, seconds))
+
+
def clear_time_override():
"""Remove the overridden time."""
utcnow.override_time = None