summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openstack/common/timeutils.py18
-rw-r--r--tests/unit/test_timeutils.py6
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):