]> granicus.if.org Git - python/commitdiff
#1162477: accept '.' in addition to ':' when parsing time in date header.
authorR David Murray <rdmurray@bitdance.com>
Mon, 14 Mar 2011 00:06:23 +0000 (20:06 -0400)
committerR David Murray <rdmurray@bitdance.com>
Mon, 14 Mar 2011 00:06:23 +0000 (20:06 -0400)
Some non-compliant MUAs use '.'s, so by the Postel Principle we should
accept them.  Patch by Thomas Herve.

Lib/email/_parseaddr.py
Lib/email/test/test_email.py
Misc/NEWS

index 41694f9b1acac5d6903cdbfcf692cb02df9eb994..4b2f5c63a76ca8ef37a171b761767b7bf26e9029 100644 (file)
@@ -99,6 +99,14 @@ def parsedate_tz(data):
         tss = '0'
     elif len(tm) == 3:
         [thh, tmm, tss] = tm
+    elif len(tm) == 1 and '.' in tm[0]:
+        # Some non-compliant MUAs use '.' to separate time elements.
+        tm = tm[0].split('.')
+        if len(tm) == 2:
+            [thh, tmm] = tm
+            tss = 0
+        elif len(tm) == 3:
+            [thh, tmm, tss] = tm
     else:
         return None
     try:
index 16772b1ee53b081bf7a2c979264b4f6fd9a389dd..5aaf526fd836b369e1ab897e1e6a806a2958ad2e 100644 (file)
@@ -2328,6 +2328,13 @@ class TestMiscellaneous(TestEmailBase):
            (2002, 4, 3, 14, 58, 26, 0, 1, -1, -28800))
 
 
+    def test_parsedate_accepts_time_with_dots(self):
+        eq = self.assertEqual
+        eq(utils.parsedate_tz('5 Feb 2003 13.47.26 -0800'),
+           (2003, 2, 5, 13, 47, 26, 0, 1, -1, -28800))
+        eq(utils.parsedate_tz('5 Feb 2003 13.47 -0800'),
+           (2003, 2, 5, 13, 47, 0, 0, 1, -1, -28800))
+
     def test_parsedate_acceptable_to_time_functions(self):
         eq = self.assertEqual
         timetup = utils.parsedate('5 Feb 2003 13:47:26 -0800')
index f22f41cc9f613d6731ed2d930b55ac5a12daf5fa..a87e501dab8df88f06624d436ebaeacec98f815e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -68,6 +68,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #1162477: Postel Principal adjustment to email date parsing: handle the
+  fact that some non-compliant MUAs use '.' instead of ':' in time specs.
+
 - Issue #11131: Fix sign of zero in decimal.Decimal plus and minus
   operations when the rounding mode is ROUND_FLOOR.