On 14/04/13 20:55, Steven Hiscocks wrote:
def get_next(self, skip=1):
- """Return the next log entry as a dictionary of fields.
+ """Return the next log entry as a mapping type, currently
+ a standard dictionary of fields.
Optional skip value will return the `skip`\-th log entry.
Entries will be processed with converters specified during
Reader creation.
"""
- return self._convert_entry(
- super(Reader, self).get_next(skip))
+ if super(Reader, self)._next(skip):
+ entry = super(Reader, self)._get_all()
+ if entry:
+ entry['__REALTIME_TIMESTAMP'] = self._get_realtime()
+ entry['__MONOTONIC_TIMESTAMP'] = self._get_monotonic()
+ entry['__CURSOR'] = self._get_cursor()
I've picked up on a bug here in python3, `_get_cursor` returns a string,
which then gets passed to the default bytes->string conversion in
`_convert_field` which in turn throws a TypeError. It can be worked
around by adding "__CUSROR" entry to converters, with suitable
conversion (direct return or str).
I wasn't sure on the correct approach to fix this:
- Should `_get_cursor` return bytes, like the non-special fields?
- Or should it continue to return string (as it is special, and
__{REALTIME,MONOTONIC}_TIMESTAMP fields don't return bytes) and
therefore the DEFAULT_CONVERTERS be updated to handle this?
- One more complex option is making _convert_field aware of the special
fields, and if no entry exists in the converters, simply just returns
the value rather than attempting Unicode decode? This would handle the
case where some one sets the converters to `{}`.
+ return self._convert_entry(entry)
+ return dict()
+
--
Steven Hiscocks
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel