chiark / gitweb /
systemd-python: return both parts of sd_journal_get_monotonic_usec
[elogind.git] / src / python-systemd / journal.py
index 892a56ff23730932bcfdbc16e7a5ad51cedc7b4c..a5641e98b2f2b486c77af0150d91e50b8ff95cb5 100644 (file)
@@ -19,6 +19,8 @@
 #  You should have received a copy of the GNU Lesser General Public License
 #  along with systemd; If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import division
+
 import sys as _sys
 import datetime as _datetime
 import functools as _functools
@@ -28,7 +30,7 @@ import os as _os
 from os import SEEK_SET, SEEK_CUR, SEEK_END
 import logging as _logging
 if _sys.version_info >= (3,):
-    from collections import ChainMap
+    from collections import ChainMap as _ChainMap
 from syslog import (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR,
                     LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG)
 from ._journal import sendv, stream_fd
@@ -36,8 +38,14 @@ from ._reader import (_Journal, NOP, APPEND, INVALIDATE,
                       LOCAL_ONLY, RUNTIME_ONLY, SYSTEM_ONLY)
 from . import id128 as _id128
 
-_MONOTONIC_CONVERTER = lambda x: _datetime.timedelta(microseconds=float(x))
-_REALTIME_CONVERTER = lambda x: _datetime.datetime.fromtimestamp(float(x)/1E6)
+if _sys.version_info >= (3,):
+    from ._reader import Monotonic
+else:
+    Monotonic = tuple
+
+_MONOTONIC_CONVERTER = lambda p: Monotonic((_datetime.timedelta(microseconds=p[0]),
+                                            _uuid.UUID(bytes=p[1])))
+_REALTIME_CONVERTER = lambda x: _datetime.datetime.fromtimestamp(x / 1E6)
 DEFAULT_CONVERTERS = {
     'MESSAGE_ID': _uuid.UUID,
     '_MACHINE_ID': _uuid.UUID,
@@ -112,7 +120,7 @@ class Journal(_Journal):
         """
         super(Journal, self).__init__(flags, path)
         if _sys.version_info >= (3,3):
-            self.converters = ChainMap()
+            self.converters = _ChainMap()
             if converters is not None:
                 self.converters.maps.append(converters)
             self.converters.maps.append(DEFAULT_CONVERTERS)