X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fpython-systemd%2Fjournal.py;h=c918c439b5d349b93e1c4c220254a22ce5f49a03;hb=d7607eac6318ae8ff1c00ef5705fd55a614cd495;hp=fee39c9e088edea5f6746ff5cda864acfda3650d;hpb=2b01924cda5257531867119e11ee950741af2ff6;p=elogind.git diff --git a/src/python-systemd/journal.py b/src/python-systemd/journal.py index fee39c9e0..c918c439b 100644 --- a/src/python-systemd/journal.py +++ b/src/python-systemd/journal.py @@ -35,7 +35,7 @@ from syslog import (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, from ._journal import sendv, stream_fd from ._reader import (_Reader, NOP, APPEND, INVALIDATE, LOCAL_ONLY, RUNTIME_ONLY, SYSTEM_ONLY, - get_catalog) + _get_catalog) from . import id128 as _id128 if _sys.version_info >= (3,): @@ -51,10 +51,10 @@ def _convert_source_monotonic(s): return _datetime.timedelta(microseconds=int(s)) def _convert_realtime(t): - return _datetime.datetime.fromtimestamp(t / 1E6) + return _datetime.datetime.fromtimestamp(t / 1000000) def _convert_timestamp(s): - return _datetime.datetime.fromtimestamp(int(s) / 1E6) + return _datetime.datetime.fromtimestamp(int(s) / 1000000) if _sys.version_info >= (3,): def _convert_uuid(s): @@ -137,6 +137,9 @@ class Reader(_Reader): the conversion fails with a ValueError, unconverted bytes object will be returned. (Note that ValueEror is a superclass of UnicodeDecodeError). + + Reader implements the context manager protocol: the journal + will be closed when exiting the block. """ super(Reader, self).__init__(flags, path) if _sys.version_info >= (3,3): @@ -209,6 +212,17 @@ class Reader(_Reader): return set(self._convert_field(field, value) for value in super(Reader, self).query_unique(field)) + def wait(self, timeout=None): + """Wait for a change in the journal. `timeout` is the maximum + time in seconds to wait, or None, to wait forever. + + Returns one of NOP (no change), APPEND (new entries have been + added to the end of the journal), or INVALIDATE (journal files + have been added or removed). + """ + us = -1 if timeout is None else int(timeout * 1000000) + return super(Reader, self).wait(timeout) + def seek_realtime(self, realtime): """Seek to a matching journal entry nearest to `realtime` time. @@ -216,8 +230,8 @@ class Reader(_Reader): or datetime.datetime instance. """ if isinstance(realtime, _datetime.datetime): - realtime = float(realtime.strftime("%s.%f")) - return super(Reader, self).seek_realtime(realtime) + realtime = float(realtime.strftime("%s.%f")) * 1000000 + return super(Reader, self).seek_realtime(int(realtime)) def seek_monotonic(self, monotonic, bootid=None): """Seek to a matching journal entry nearest to `monotonic` time. @@ -229,6 +243,7 @@ class Reader(_Reader): """ if isinstance(monotonic, _datetime.timedelta): monotonic = monotonic.totalseconds() + monotonic = int(monotonic * 1000000) if isinstance(bootid, _uuid.UUID): bootid = bootid.get_hex() return super(Reader, self).seek_monotonic(monotonic, bootid) @@ -281,6 +296,11 @@ class Reader(_Reader): self.add_match(_MACHINE_ID=machineid) +def get_catalog(mid): + if isinstance(mid, _uuid.UUID): + mid = mid.get_hex() + return _get_catalog(mid) + def _make_line(field, value): if isinstance(value, bytes): return field.encode('utf-8') + b'=' + value