Skip to content

Commit

Permalink
Import latest timeutils from oslo-incubator
Browse files Browse the repository at this point in the history
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
  • Loading branch information
flaper87 authored and markmc committed Jan 8, 2013
1 parent d58061d commit fa2ca8e
Showing 1 changed file with 28 additions and 5 deletions.
33 changes: 28 additions & 5 deletions nova/openstack/common/timeutils.py
Expand Up @@ -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)

Expand All @@ -91,22 +91,32 @@ 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()


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):
Expand Down Expand Up @@ -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))

0 comments on commit fa2ca8e

Please sign in to comment.