in share/multiline.py [0:0]
def collect(self) -> CollectIterator:
for data, newline in self.feed:
last_iteration_datetime: datetime.datetime = datetime.datetime.now(datetime.UTC)
if self._pre_collect_buffer:
self._buffer.collect_and_reset()
self._buffer.grow(data, newline)
self._pre_collect_buffer = False
elif self._flush_pattern and self._flush_pattern.search(data) is not None:
self._buffer.grow(data, newline)
self._pre_collect_buffer = True
yield self._buffer.collect_and_reset()
elif (
not self._buffer.is_empty() and self._check_matcher() and not self._matcher(self._buffer.previous, data)
):
content, current_length, _ = self._buffer.collect_and_reset()
self._buffer.grow(data, newline)
yield content, current_length, newline
else:
if (datetime.datetime.now(datetime.UTC) - last_iteration_datetime) > timedelta_circuit_breaker:
yield self._buffer.collect_and_reset()
self._buffer.grow(data, newline)
if not self._buffer.is_empty():
yield self._buffer.collect_and_reset()