diff -r 37e67ec434f3 -r 95c0c49d76aa log_source.py --- a/log_source.py Wed Feb 11 22:01:53 2009 +0200 +++ b/log_source.py Wed Feb 11 22:24:55 2009 +0200 @@ -8,6 +8,9 @@ import config, utils +# a timedelta that represents one day +ONE_DAY = datetime.timedelta(days=1) + class LogSourceDecoder (object) : """ Handles decoding of LogSource lines @@ -157,7 +160,7 @@ def get_month_days (self, dt) : """ - Return a sequence of dates, telling which days in the given month (as a datetime) have logs available + Return an ordered sequence of dates, telling which days in the given month (as a datetime) have logs available. """ abstract @@ -175,6 +178,20 @@ """ abstract + + def get_prev_date (self, dt) : + """ + Get the next distinct date of logs available preceeding the given date, or None + """ + + abstract + + def get_next_date (self, dt) : + """ + Get the next distinct date of logs following the given date, or None. + """ + + abstract class LogFile (object) : """ @@ -416,21 +433,21 @@ else : raise - def _iter_logfile_dates (self, after=None, until=None) : + def _iter_logfile_dates (self, after=None, until=None, reverse=False) : """ Yields a series of naive datetime objects representing the logfiles that are available, in time order. - - If after is given, only dates from said date onwards will be returned - If until is given, only dates up to and including said date will be returned + + Parameters : + after only dates from said date onwards will be returned + until only dates up to and including said date will be returned + reverse the dates are returned in reverse order instead. Note that the meaning of after/until doesn't change """ # listdir filenames = os.listdir(self.path) # sort - filenames.sort() - - + filenames.sort(reverse=reverse) # iter files for filename in filenames : @@ -443,13 +460,16 @@ continue else : - if (not after or date >= after) and (not until or date <= until) : + if (after and date < after) or (until and date > until) : + # ignore + continue + + else : +# print +# print "iter_logfile_dates: after=%s, until=%s, reverse=%s -> %s" % (after, until, reverse, date) + # yield yield date - - else : - # ignore - continue def _iter_date_reverse (self, dt=None) : """ @@ -465,9 +485,6 @@ # convert to target timezone dtz = dt.astimezone(self.tz) - # our timedelta - ONE_DAY = datetime.timedelta(1) - # iterate unto infinity while True : # yield @@ -526,7 +543,7 @@ def get_latest (self, count) : """ - Uses _iter_backwards + _get_logfile_date to read the yield the given lines from as many logfiles as needed + Uses _logfile_reverse to read the yield the given lines from as many logfiles as needed """ # read the events into here @@ -645,3 +662,27 @@ for line in logfile.read_full() : yield line + def get_prev_date (self, dt) : + """ + Just use _iter_logfile_dates + """ + + # use for to "iter" once + for log_date in self._iter_logfile_dates(until=dt - ONE_DAY, reverse=True) : + return log_date + + else : + return None + + def get_next_date (self, dt) : + """ + Just use _iter_logfile_dates + """ + + # use for to "iter" once + for log_date in self._iter_logfile_dates(after=dt + ONE_DAY) : + return log_date + + else : + return None +