mirror of
https://github.com/python/cpython.git
synced 2025-11-27 05:44:16 +00:00
#1194222: make parsedate always return RFC2822 four character years.
Two character years are now converted to four character years using the Posix standard rule (<68 == 2000, >=68==1900). This makes the parsed date RFC2822 compliant even if the input is not. Patch and test by Jeffrey Finkelstein.
This commit is contained in:
parent
1970b62aee
commit
219d1c8ae3
4 changed files with 29 additions and 0 deletions
|
|
@ -107,6 +107,18 @@ def parsedate_tz(data):
|
||||||
tss = int(tss)
|
tss = int(tss)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return None
|
return None
|
||||||
|
# Check for a yy specified in two-digit format, then convert it to the
|
||||||
|
# appropriate four-digit format, according to the POSIX standard. RFC 822
|
||||||
|
# calls for a two-digit yy, but RFC 2822 (which obsoletes RFC 822)
|
||||||
|
# mandates a 4-digit yy. For more information, see the documentation for
|
||||||
|
# the time module.
|
||||||
|
if yy < 100:
|
||||||
|
# The year is between 1969 and 1999 (inclusive).
|
||||||
|
if yy > 68:
|
||||||
|
yy += 1900
|
||||||
|
# The year is between 2000 and 2068 (inclusive).
|
||||||
|
else:
|
||||||
|
yy += 2000
|
||||||
tzoffset = None
|
tzoffset = None
|
||||||
tz = tz.upper()
|
tz = tz.upper()
|
||||||
if tz in _timezones:
|
if tz in _timezones:
|
||||||
|
|
|
||||||
|
|
@ -2234,6 +2234,19 @@ class TestMiscellaneous(TestEmailBase):
|
||||||
eq(time.localtime(t)[:6], timetup[:6])
|
eq(time.localtime(t)[:6], timetup[:6])
|
||||||
eq(int(time.strftime('%Y', timetup[:9])), 2003)
|
eq(int(time.strftime('%Y', timetup[:9])), 2003)
|
||||||
|
|
||||||
|
def test_parsedate_y2k(self):
|
||||||
|
"""Test for parsing a date with a two-digit year.
|
||||||
|
|
||||||
|
Parsing a date with a two-digit year should return the correct
|
||||||
|
four-digit year. RFC822 allows two-digit years, but RFC2822 (which
|
||||||
|
obsoletes RFC822) requires four-digit years.
|
||||||
|
|
||||||
|
"""
|
||||||
|
self.assertEqual(utils.parsedate_tz('25 Feb 03 13:47:26 -0800'),
|
||||||
|
utils.parsedate_tz('25 Feb 2003 13:47:26 -0800'))
|
||||||
|
self.assertEqual(utils.parsedate_tz('25 Feb 71 13:47:26 -0800'),
|
||||||
|
utils.parsedate_tz('25 Feb 1971 13:47:26 -0800'))
|
||||||
|
|
||||||
def test_parseaddr_empty(self):
|
def test_parseaddr_empty(self):
|
||||||
self.assertEqual(utils.parseaddr('<>'), ('', ''))
|
self.assertEqual(utils.parseaddr('<>'), ('', ''))
|
||||||
self.assertEqual(utils.formataddr(utils.parseaddr('<>')), '')
|
self.assertEqual(utils.formataddr(utils.parseaddr('<>')), '')
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,7 @@ Niels Ferguson
|
||||||
Sebastian Fernandez
|
Sebastian Fernandez
|
||||||
Vincent Fiack
|
Vincent Fiack
|
||||||
Tomer Filiba
|
Tomer Filiba
|
||||||
|
Jeffrey Finkelstein
|
||||||
Russell Finn
|
Russell Finn
|
||||||
Nils Fischbeck
|
Nils Fischbeck
|
||||||
Frederik Fix
|
Frederik Fix
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,9 @@ Extensions
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #1194222: email.utils.parsedate now returns RFC2822 compliant four
|
||||||
|
character years even if the message contains RFC822 two character years.
|
||||||
|
|
||||||
- Issue #8750: Fixed MutableSet's methods to correctly handle reflexive
|
- Issue #8750: Fixed MutableSet's methods to correctly handle reflexive
|
||||||
operations on its self, namely x -= x and x ^= x.
|
operations on its self, namely x -= x and x ^= x.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue