Source code for loglab.filters

import time

from .lineformats import LogLineParseError


[docs]class Filter(object): """Base class for log filters""" def __init__(self, iterable): self.iterable = iter(iterable) def __iter__(self): for l in self.iterable: if self.accept(l): yield l
[docs] def accept(self, line): """Returns True if a log line should be accepted""" raise NotImplementedError("Subclasses must implement this method")
[docs]class DateFilter(Filter): """Filters log lines by date""" def __init__(self, iterable, date): self.iterable = iter(iterable) self.date = date self.prefix = self.date.strftime('%d/%b/%Y') def accept(self, line): return line.date.startswith(self.prefix)
[docs]class DateRangeFilter(Filter): """Filter to only yield lines with dates in a given range.""" def __init__(self, iterable, start_date=None, end_date=None): self.iterable = iterable if start_date: self.start_date = time.mktime(start_date.timetuple()) if end_date: self.end_date = time.mktime(end_date.timetuple()) if start_date and end_date: self.accept = self.accept_in elif start_date: self.accept = self.accept_from elif end_date: self.accept = self.accept_to else: raise ValueError("Neither start_date nor end_date given") def accept_in(self, line): return self.start_date <= line.time() < self.end_date def accept_from(self, line): return self.start_date <= line.time() def accept_to(self, line): return line.time() < self.end_date