diff options
author | SandyWalsh <sandy.walsh@rackspace.com> | 2012-08-10 15:35:34 -0300 |
---|---|---|
committer | SandyWalsh <sandy.walsh@rackspace.com> | 2012-08-10 15:35:34 -0300 |
commit | 01b4f31d59837459cc62d30332c096f6e1be79df (patch) | |
tree | a4c6f273ace9f3b72fc7bc9d5dfb8b62903a5150 | |
parent | c9db396cb6473246e5ccf3072ba592ef47fd9d16 (diff) | |
download | oslo-01b4f31d59837459cc62d30332c096f6e1be79df.tar.gz oslo-01b4f31d59837459cc62d30332c096f6e1be79df.tar.xz oslo-01b4f31d59837459cc62d30332c096f6e1be79df.zip |
Support for marshalling datetime while preserving microseconds.
Needed for performance measurement via "inflight" service.
Change-Id: I5c1a8395b4cbc5fc0f8649b3af8130f45dd401bb
-rw-r--r-- | openstack/common/timeutils.py | 18 | ||||
-rw-r--r-- | tests/unit/test_timeutils.py | 6 |
2 files changed, 24 insertions, 0 deletions
diff --git a/openstack/common/timeutils.py b/openstack/common/timeutils.py index 4416a3b..ae300e4 100644 --- a/openstack/common/timeutils.py +++ b/openstack/common/timeutils.py @@ -106,3 +106,21 @@ def advance_time_seconds(seconds): def clear_time_override(): """Remove the overridden time.""" utcnow.override_time = None + + +def marshall_now(now=None): + """Make an rpc-safe datetime with microseconds. + + Note: tzinfo is stripped, but not required for relative times.""" + if not now: + now = utcnow() + return dict(day=now.day, month=now.month, year=now.year, hour=now.hour, + minute=now.minute, second=now.second, + microsecond=now.microsecond) + + +def unmarshall_time(tyme): + """Unmarshall a datetime dict.""" + return datetime.datetime(day=tyme['day'], month=tyme['month'], + year=tyme['year'], hour=tyme['hour'], minute=tyme['minute'], + second=tyme['second'], microsecond=tyme['microsecond']) diff --git a/tests/unit/test_timeutils.py b/tests/unit/test_timeutils.py index 7dbd608..129609e 100644 --- a/tests/unit/test_timeutils.py +++ b/tests/unit/test_timeutils.py @@ -104,6 +104,12 @@ class TimeUtilsTest(unittest.TestCase): timeutils.advance_time_seconds(60) self.assertEqual(timeutils.utcnow(), self.skynet_self_aware_time) + def test_marshall_time(self): + now = timeutils.utcnow() + binary = timeutils.marshall_now(now) + backagain = timeutils.unmarshall_time(binary) + self.assertEqual(now, backagain) + class TestIso8601Time(unittest.TestCase): |