From e898e1dc1b5104a6769178e90dfbd0707d858060 Mon Sep 17 00:00:00 2001 From: Karl Engelhardt Date: Mon, 19 Dec 2022 17:13:25 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20option=20to=20get=20line=20of?= =?UTF-8?q?fset=20*pre*=20line?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pygtail/core.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/pygtail/core.py b/pygtail/core.py index 7b09c26..fc9497d 100755 --- a/pygtail/core.py +++ b/pygtail/core.py @@ -83,8 +83,11 @@ def __repr__(self): class PygtailIteratorWithOffsets: - def __init__(self, pygtail): + def __init__(self, pygtail, offset_position="post"): self._pygtail = pygtail + if offset_position not in ["pre", "post"]: + raise ValueError(f"offset_position needs to be either 'pre' or 'post', was '{offset_position}'") + self.offset_position = offset_position def __next__(self): return self.next() @@ -92,14 +95,23 @@ def __next__(self): def __iter__(self): return self - def next(self): - next_line = self._pygtail.next() + def _get_offset(self): offset = self._pygtail._filehandle().tell() inode = fstat(self._pygtail._filehandle().fileno()).st_ino counter = self._pygtail._counter offset_instance = Offset(counter, inode, offset) - return next_line, offset_instance + return offset_instance + + def next(self): + if self.offset_position == "pre": + offset = self._get_offset() + line = self._pygtail.next() + + if self.offset_position == "post": + line = self._pygtail.next() + offset = self._get_offset() + return line, offset class Pygtail(object): """ @@ -197,9 +209,9 @@ def next(self): return line - def with_offsets(self): + def with_offsets(self, offset_position="post"): """Returns an iterator that yields lines with their internal offset state""" - return PygtailIteratorWithOffsets(self) + return PygtailIteratorWithOffsets(self, offset_position) def __next__(self): """`__next__` is the Python 3 version of `next`"""