Commit 3197d275 authored by Lennart Regebro's avatar Lennart Regebro

Fix for collector issue #411. DateTime.rfc822() is not rfc2822 compliant.

parent 42ea9a15
...@@ -12,13 +12,12 @@ ...@@ -12,13 +12,12 @@
############################################################################## ##############################################################################
"""Encapsulation of date/time values""" """Encapsulation of date/time values"""
__version__='$Revision: 1.79 $'[11:-2] __version__='$Revision: 1.80 $'[11:-2]
import re,sys, os, math, DateTimeZone import re,sys, os, math, DateTimeZone
from time import time, gmtime, localtime, asctime from time import time, gmtime, localtime, asctime
from time import timezone, strftime from time import daylight, timezone, altzone, strftime
from time import daylight, timezone, altzone
from types import InstanceType,IntType,FloatType,StringType,UnicodeType from types import InstanceType,IntType,FloatType,StringType,UnicodeType
try: from time import tzname try: from time import tzname
except: tzname=('UNKNOWN','UNKNOWN') except: tzname=('UNKNOWN','UNKNOWN')
...@@ -400,6 +399,9 @@ def safelocaltime(t): ...@@ -400,6 +399,9 @@ def safelocaltime(t):
rval = localtime(t_int) rval = localtime(t_int)
return rval return rval
def _tzoffset2rfc822zone(seconds):
return "%+03d%02d" % divmod( (-seconds/60), 60)
class DateTime: class DateTime:
"""DateTime objects represent instants in time and provide """DateTime objects represent instants in time and provide
...@@ -1435,9 +1437,16 @@ class DateTime: ...@@ -1435,9 +1437,16 @@ class DateTime:
def rfc822(self): def rfc822(self):
"""Return the date in RFC 822 format""" """Return the date in RFC 822 format"""
if self._tz == self._localzone0: #Use local standard time
tzoffset = _tzoffset2rfc822zone(localzone)
elif self._tz == self._localzone1: # Use local daylight saving time
tzoffset = _tzoffset2rfc822zone(altzone)
else:
tzoffset = '-0000' # unknown time zone offset
return '%s, %2.2d %s %d %2.2d:%2.2d:%2.2d %s' % ( return '%s, %2.2d %s %d %2.2d:%2.2d:%2.2d %s' % (
self._aday,self._day,self._amon,self._year, self._aday,self._day,self._amon,self._year,
self._hour,self._minute,self._nearsec,self._tz) self._hour,self._minute,self._nearsec,tzoffset)
# New formats # New formats
......
# To run these tests, use: # To run these tests, use:
# python unittest.py DateTime.tests.suite # python unittest.py DateTime.tests.suite
...@@ -5,9 +6,7 @@ import unittest ...@@ -5,9 +6,7 @@ import unittest
from DateTime import DateTime from DateTime import DateTime
import string import string
import math import math
import time
import os
__basedir__ = os.getcwd()
class DateTimeTests (unittest.TestCase): class DateTimeTests (unittest.TestCase):
...@@ -94,7 +93,7 @@ class DateTimeTests (unittest.TestCase): ...@@ -94,7 +93,7 @@ class DateTimeTests (unittest.TestCase):
# Compare representations as it's the # Compare representations as it's the
# only way to compare the dates to the same accuracy # only way to compare the dates to the same accuracy
self.assertEqual(repr(dt),repr(dt1)) self.assertEqual(repr(dt),repr(dt1))
def testDayOfWeek(self): def testDayOfWeek(self):
'''strftime() used to always be passed a day of week of 0.''' '''strftime() used to always be passed a day of week of 0.'''
dt = DateTime('2000/6/16') dt = DateTime('2000/6/16')
...@@ -218,27 +217,32 @@ class DateTimeTests (unittest.TestCase): ...@@ -218,27 +217,32 @@ class DateTimeTests (unittest.TestCase):
isoDt = DateTime('2002-05-02T08:00:00Z-04:00') isoDt = DateTime('2002-05-02T08:00:00Z-04:00')
self.assertEqual( ref1, isoDt) self.assertEqual( ref1, isoDt)
def testRFC822(self):
def testJulianWeek(self): '''rfc822 conversion'''
""" check JulianDayWeek function """ isDST = time.localtime(time.time())[8]
if isDST:
try: offset = time.altzone
import gzip else:
except ImportError: offset = time.timezone
print "Warning: testJulianWeek disabled: module gzip not found"
return 0 rfc822zone = "%+03d%02d" % divmod( (-offset/60), 60)
wrongzone = "%+03d:%02d" % divmod( (60-offset/60), 60) #one hour off, ISO format
lines = gzip.GzipFile(os.path.join(__basedir__,
'julian_testdata.txt.gz')).readlines() # Create a local DateTime and test
dt = DateTime(2002, 5, 2, 8, 0, 0)
for line in lines: self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00' + ' ' + rfc822zone)
d = DateTime(line[:10])
result_from_mx=tuple(map(int, line[12:-2].split(','))) # Create a non-local date time and test
self.assertEqual(result_from_mx[1], d.week()) dt = DateTime('2002-05-02T08:00:00Z'+wrongzone)
self.assertEqual(dt.rfc822(), 'Thu, 02 May 2002 08:00:00 -0000')
#print dt.rfc822()
def test_suite(): def test_suite():
return unittest.makeSuite(DateTimeTests) return unittest.makeSuite(DateTimeTests)
if __name__=="__main__": if __name__=="__main__":
unittest.TextTestRunner().run(test_suite()) unittest.TextTestRunner().run(test_suite())
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment