summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlaper Fesp <flaper87@gmail.com>2013-01-08 16:10:58 +0100
committerMark McLoughlin <markmc@redhat.com>2013-01-08 23:23:11 +0000
commitfa2ca8ea7f538669fb32e431eb4c5ea94e6e2e3f (patch)
treee2cdb675c99daf19dd34fe6d1b03eb6fd988789e
parentd58061d5ff819f3e8434256264b2d09a02751271 (diff)
downloadnova-fa2ca8ea7f538669fb32e431eb4c5ea94e6e2e3f.tar.gz
nova-fa2ca8ea7f538669fb32e431eb4c5ea94e6e2e3f.tar.xz
nova-fa2ca8ea7f538669fb32e431eb4c5ea94e6e2e3f.zip
Import latest timeutils from oslo-incubator
Fixes bug #1097464 Changes synced are: a08daf1 Use basestring instead of str for type check. 615d769 Account for tasks duration in LoopingCall delay ce80aac Convenience wrapper for datetime.timedelta.total_seconds() Change-Id: If4ab7ccd2f4e815e01c41f25fdd541ffcd7693d5
-rw-r--r--nova/openstack/common/timeutils.py33
1 files changed, 28 insertions, 5 deletions
diff --git a/nova/openstack/common/timeutils.py b/nova/openstack/common/timeutils.py
index f433b718b..0f346087f 100644
--- a/nova/openstack/common/timeutils.py
+++ b/nova/openstack/common/timeutils.py
@@ -71,14 +71,14 @@ def normalize_time(timestamp):
def is_older_than(before, seconds):
"""Return True if before is older than seconds."""
- if isinstance(before, str):
+ if isinstance(before, basestring):
before = parse_strtime(before).replace(tzinfo=None)
return utcnow() - before > datetime.timedelta(seconds=seconds)
def is_newer_than(after, seconds):
"""Return True if after is newer than seconds."""
- if isinstance(after, str):
+ if isinstance(after, basestring):
after = parse_strtime(after).replace(tzinfo=None)
return after - utcnow() > datetime.timedelta(seconds=seconds)
@@ -91,7 +91,10 @@ def utcnow_ts():
def utcnow():
"""Overridable version of utils.utcnow."""
if utcnow.override_time:
- return utcnow.override_time
+ try:
+ return utcnow.override_time.pop(0)
+ except AttributeError:
+ return utcnow.override_time
return datetime.datetime.utcnow()
@@ -99,14 +102,21 @@ utcnow.override_time = None
def set_time_override(override_time=datetime.datetime.utcnow()):
- """Override utils.utcnow to return a constant time."""
+ """
+ Override utils.utcnow to return a constant time or a list thereof,
+ one at a time.
+ """
utcnow.override_time = override_time
def advance_time_delta(timedelta):
"""Advance overridden time using a datetime.timedelta."""
assert(not utcnow.override_time is None)
- utcnow.override_time += timedelta
+ try:
+ for dt in utcnow.override_time:
+ dt += timedelta
+ except TypeError:
+ utcnow.override_time += timedelta
def advance_time_seconds(seconds):
@@ -139,3 +149,16 @@ def unmarshall_time(tyme):
minute=tyme['minute'],
second=tyme['second'],
microsecond=tyme['microsecond'])
+
+
+def delta_seconds(before, after):
+ """
+ Compute the difference in seconds between two date, time, or
+ datetime objects (as a float, to microsecond resolution).
+ """
+ delta = after - before
+ try:
+ return delta.total_seconds()
+ except AttributeError:
+ return ((delta.days * 24 * 3600) + delta.seconds +
+ float(delta.microseconds) / (10 ** 6))