diff -r d4848d807fd1 -r 751e3fcd11d2 log_source.py --- a/log_source.py Wed Feb 11 23:38:05 2009 +0200 +++ b/log_source.py Thu Feb 12 00:16:52 2009 +0200 @@ -384,18 +384,7 @@ self.decoder = decoder self.filename_fmt = filename_fmt - def _get_logfile_datetime (self, dt) : - """ - Get the logfile corresponding to the given datetime - """ - - # convert to target timezone - dtz = dt.astimezone(self.tz) - - # convert to date and use that - return self._get_logfile_date(dtz.date()) - - def _get_logfile_date (self, d, load=True, mtime=False, ignore_missing=True) : + def _get_logfile_date (self, d, load=True, mtime=False, ignore_missing=False) : """ Get the logfile corresponding to the given naive date in our timezone. @@ -443,6 +432,13 @@ reverse the dates are returned in reverse order instead. Note that the meaning of after/until doesn't change """ + # convert timestamps to our timezone's dates + if after : + after = after.astimezone(self.tz).date() + + if until : + until = until.astimezone(self.tz).date() + # listdir filenames = os.listdir(self.path) @@ -453,7 +449,8 @@ for filename in filenames : try : # parse date - date = self.tz.localize(datetime.datetime.strptime(filename, self.filename_fmt)) + dt = self.tz.localize(datetime.datetime.strptime(filename, self.filename_fmt)) + date = dt.date() except : # ignore @@ -465,11 +462,8 @@ continue else : -# print -# print "iter_logfile_dates: after=%s, until=%s, reverse=%s -> %s" % (after, until, reverse, date) - # yield - yield date + yield dt def _iter_date_reverse (self, dt=None) : """ @@ -517,7 +511,7 @@ logfile = None file_count += 1 - logfile = self._get_logfile_date(day) + logfile = self._get_logfile_date(day, ignore_missing=True) # no logfile there? if not logfile : @@ -586,18 +580,15 @@ # open that log logfile = self._get_logfile_date(d_begin) - if not logfile : - raise Exception("No logfile for date=%r" % (dt, )) - # return the full data return logfile.read_full() # otherwise, we need to pull two partial logs else : - # open both of them + # open both of them, but it's okay if we don't have the second one f_begin = self._get_logfile_date(d_begin) - f_end = self._get_logfile_date(d_end) - + f_end = self._get_logfile_date(d_end, ignore_missing=True) + # chain together the two sources return itertools.chain( f_begin.read_from(dtz_begin), @@ -634,7 +625,7 @@ log_date = dt.astimezone(self.tz).date() # test for it - if self._get_logfile_date(log_date, load=False) : + if self._get_logfile_date(log_date, load=False, ignore_missing=True) : # valid yield dt.date() @@ -648,7 +639,7 @@ # compare against dt? if dt : # stat - mtime = self._get_logfile_date(log_date, load=False, mtime=True) + mtime = self._get_logfile_date(log_date, load=False, mtime=True, ignore_missing=True) # not modified? if mtime < dt : @@ -656,7 +647,7 @@ continue # open - logfile = self._get_logfile_date(log_date, ignore_missing=False) + logfile = self._get_logfile_date(log_date) # yield all lines for line in logfile.read_full() :