diff options
author | Flaper Fesp <flaper87@gmail.com> | 2013-01-08 16:10:58 +0100 |
---|---|---|
committer | Mark McLoughlin <markmc@redhat.com> | 2013-01-08 23:23:11 +0000 |
commit | fa2ca8ea7f538669fb32e431eb4c5ea94e6e2e3f (patch) | |
tree | e2cdb675c99daf19dd34fe6d1b03eb6fd988789e | |
parent | d58061d5ff819f3e8434256264b2d09a02751271 (diff) | |
download | nova-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.py | 33 |
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)) |