Move parse_date to the apachelog.date module.
authorW. Trevor King <wking@drexel.edu>
Sat, 18 Feb 2012 17:31:47 +0000 (12:31 -0500)
committerW. Trevor King <wking@drexel.edu>
Sat, 18 Feb 2012 17:31:54 +0000 (12:31 -0500)
I also consolidated the doc-string example and duplicate unittest
cases into a single doctest, so now you need to run

  nosetest --with-doctest apachelog

to run the full suite.

apachelog/date.py [new file with mode: 0644]
apachelog/parser.py
apachelog/test/test_parser.py

diff --git a/apachelog/date.py b/apachelog/date.py
new file mode 100644 (file)
index 0000000..570eb47
--- /dev/null
@@ -0,0 +1,50 @@
+"""
+The `parse_date` function is intended as a fast way to convert a log
+date into something useful, without incurring a significant date
+parsing overhead---good enough for basic stuff but will be a problem
+if you need to deal with log from multiple servers in different
+timezones.
+"""
+
+
+MONTHS = {
+    'Jan':'01',
+    'Feb':'02',
+    'Mar':'03',
+    'Apr':'04',
+    'May':'05',
+    'Jun':'06',
+    'Jul':'07',
+    'Aug':'08',
+    'Sep':'09',
+    'Oct':'10',
+    'Nov':'11',
+    'Dec':'12'
+    }
+
+
+def parse_date(date):
+    """Convert a date to a (`timestamp`, `offset`) tuple.
+
+    Takes a date in the format: [05/Dec/2006:10:51:44 +0000]
+    (including square brackets) and returns a two element
+    tuple containing first a timestamp of the form
+    YYYYMMDDHH24IISS e.g. 20061205105144 and second the
+    timezone offset as is e.g.;
+
+    >>> parse_date('[05/Dec/2006:10:51:44 +0000]')
+    ('20061205105144', '+0000')
+
+    It does not attempt to adjust the timestamp according
+    to the timezone---this is your problem.
+    """
+    date = date[1:-1]
+    elems = [
+        date[7:11],
+        MONTHS[date[3:6]],
+        date[0:2],
+        date[12:14],
+        date[15:17],
+        date[18:20],
+        ]
+    return (''.join(elems),date[21:])
index 925b1287b7d9e86ca2a68da5b9e1075d5377ff52..6c7e3ae931552990638286578cec830bee0e7f86 100644 (file)
@@ -76,12 +76,6 @@ On my system, using a loop like;
 
 ...was able to parse ~60,000 lines / second. Adding psyco to the mix,
 up that to ~75,000 lines / second.
-
-The parse_date function is intended as a fast way to convert a log
-date into something useful, without incurring a significant date
-parsing overhead - good enough for basic stuff but will be a problem
-if you need to deal with log from multiple servers in different
-timezones.
 """
 
 __version__ = "1.1"
@@ -345,47 +339,6 @@ class parser:
         """
         return self._names
 
-months = {
-    'Jan':'01',
-    'Feb':'02',
-    'Mar':'03',
-    'Apr':'04',
-    'May':'05',
-    'Jun':'06',
-    'Jul':'07',
-    'Aug':'08',
-    'Sep':'09',
-    'Oct':'10',
-    'Nov':'11',
-    'Dec':'12'
-    }
-
-def parse_date(date):
-    """
-    Takes a date in the format: [05/Dec/2006:10:51:44 +0000]
-    (including square brackets) and returns a two element
-    tuple containing first a timestamp of the form
-    YYYYMMDDHH24IISS e.g. 20061205105144 and second the
-    timezone offset as is e.g.;
-
-    parse_date('[05/Dec/2006:10:51:44 +0000]')
-    >> ('20061205105144', '+0000')
-
-    It does not attempt to adjust the timestamp according
-    to the timezone - this is your problem.
-    """
-    date = date[1:-1]
-    elems = [
-        date[7:11],
-        months[date[3:6]],
-        date[0:2],
-        date[12:14],
-        date[15:17],
-        date[18:20],
-        ]
-    return (''.join(elems),date[21:])
-
-
 """
 Frequenty used log formats stored here
 """
index 2af98962621f0b4e74690ad1bed7dfde994823e9..2faa76a9fe07e6126c1bf075d5e638fd7de1cce7 100644 (file)
@@ -1,6 +1,6 @@
 import unittest
 
-from ..parser import ApacheLogParserError, parser, months, parse_date, formats
+from ..parser import ApacheLogParserError, parser, formats
 
 
 class TestApacheLogParser(unittest.TestCase):
@@ -140,10 +140,6 @@ class TestApacheLogParser(unittest.TestCase):
         self.assertEqual(data['%b'],'xyz', '%c')
         self.assertEqual(data['%c'],'bar', '%c')
 
-    def testparsedate(self):
-        date = '[05/Dec/2006:10:51:44 +0000]'
-        self.assertEqual(('20061205105144','+0000'),parse_date(date))
-
 class TestApacheLogParserFriendlyNames(unittest.TestCase):
 
     def setUp(self):
@@ -282,10 +278,6 @@ class TestApacheLogParserFriendlyNames(unittest.TestCase):
         self.assertEqual(data['%b'],'xyz', '%c')
         self.assertEqual(data['%c'],'bar', '%c')
 
-    def testparsedate(self):
-        date = '[05/Dec/2006:10:51:44 +0000]'
-        self.assertEqual(('20061205105144','+0000'),parse_date(date))
-
 
 if __name__ is '__main__':
     unittest.main()