# HG changeset patch # User Tero Marttila # Date 1234383895 -7200 # Node ID 95c0c49d76aa3cfff70d3c80912a18966b3f4c57 # Parent 37e67ec434f3e5613ac97d6f4917da3593b85b50 implement prev/next_date in LogSource diff -r 37e67ec434f3 -r 95c0c49d76aa handlers.py --- a/handlers.py Wed Feb 11 22:01:53 2009 +0200 +++ b/handlers.py Wed Feb 11 22:24:55 2009 +0200 @@ -201,7 +201,7 @@ """ # fix date timezone - date = date.replace(tzinfo=timezone) + date = timezone.localize(date) # get that day's events, either paged or not if page : @@ -230,6 +230,10 @@ count = count, max = max, lines = lines, + + # for prev/next date + date_next = channel.source.get_next_date(date), + date_prev = channel.source.get_prev_date(date), ) @preferences.handler(prefs.formatter, prefs.count) 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 + diff -r 37e67ec434f3 -r 95c0c49d76aa templates/channel_date.tmpl --- a/templates/channel_date.tmpl Wed Feb 11 22:01:53 2009 +0200 +++ b/templates/channel_date.tmpl Wed Feb 11 22:24:55 2009 +0200 @@ -5,10 +5,14 @@ <%def name="paginate_date()"> <%call expr="paginate.paginate(urls.channel_date, count, page, max, channel=channel, date=date)"> <%def name="left()"> - « ${h.fmt_date(h.prev_date(date))} + % if date_prev : + « ${h.fmt_date(date_prev)} + % endif <%def name="right()"> - ${h.fmt_date(h.next_date(date))} » + % if date_next : + ${h.fmt_date(date_next)} » + % endif