diff -r c5ce145fdd70 -r cc3ab2c39ded log_source.py --- a/log_source.py Tue Feb 10 00:19:56 2009 +0200 +++ b/log_source.py Tue Feb 10 01:02:26 2009 +0200 @@ -2,7 +2,7 @@ A source of IRC log files """ -import datetime, calendar, itertools +import datetime, calendar, itertools, functools import os, errno import pytz @@ -20,18 +20,54 @@ def get_date (self, dt) : """ - Get logs for the given date (as a datetime) + Get logs for the given date (as a datetime). """ abstract + def get_date_paged (self, dt, count, page=None) : + """ + Get the logs for a given date (as a datetime), divided into pages of count each. If page is given, the time + portion of the dt is ignored, and the lines for the given page are returned. Otherwise, if page is None, + then the lines for the page containing the given timestamp is returned. + + The return value is a (page, max, lines) tuple. + """ + + # how to act? + if page : + # constant skip + skip = (page - 1) * count + + else : + skip = None + + # collect lines + lines = [] + + # iterate using get_date + for line in self.get_date(dt) : + # skip? + if skip : + skip -= 1 + continue + + # store line + lines.append(line) + + # count? + if len(lines) >= count : + break + + return (page, 0, lines) + def get_month_days (self, dt) : """ Get a set of dates, telling which days in the given month (as a datetime) have logs available """ abstract - + class LogFile (object) : """ A file containing LogEvents @@ -69,7 +105,7 @@ def read_full (self) : """ - Reads all LogLines. The LogLines will have a valid offset + Reads all LogLines. The LogLines will have a valid offset. """ # just use our __iter__ @@ -380,7 +416,7 @@ # open both of them f_begin = self._get_logfile_date(d_begin) f_end = self._get_logfile_date(d_end) - + # chain together the two sources return itertools.chain( f_begin.read_from(dtz_begin),