log_source.py
changeset 115 751e3fcd11d2
parent 112 090192b64d7e
--- 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() :