[Calendarserver-maintainers] Bug#851982: python-vobject: Unable to write iCalendar file using datetime with tzinfo
Petter Reinholdtsen
pere at hungry.com
Fri Jan 20 14:53:33 UTC 2017
Package: python-vobject
Version: 0.8.1c-4
I get a strange exception when trying to write a iCalendar stream using
datetime values with the timezone set. This is the output from the test
script below:
VCALENDAR
VEVENT
DTSTART: 2002-01-07 12:15:00+01:00
UID: unique-uid
SUMMARY: summary
Traceback (most recent call last):
File "<stdin>", line 20, in <module>
File "<stdin>", line 15, in main
File "/usr/lib/pymodules/python2.7/vobject/base.py", line 186, in serialize
return behavior.serialize(self, buf, lineLength, validate)
File "/usr/lib/pymodules/python2.7/vobject/behavior.py", line 147, in serialize
cls.generateImplicitParameters(obj)
File "/usr/lib/pymodules/python2.7/vobject/icalendar.py", line 875, in generateImplicitParameters
obj.add(TimezoneComponent(tzinfo=getTzid(tzid)))
File "/usr/lib/pymodules/python2.7/vobject/icalendar.py", line 75, in __init__
self.tzinfo = tzinfo
File "/usr/lib/pymodules/python2.7/vobject/base.py", line 499, in __setattr__
prop.fset(self, value)
File "/usr/lib/pymodules/python2.7/vobject/icalendar.py", line 145, in settzinfo
transition = getTransition(transitionTo, year, tzinfo)
File "/usr/lib/pymodules/python2.7/vobject/icalendar.py", line 1897, in getTransition
uncorrected = firstTransition(generateDates(year, month, day), test)
File "/usr/lib/pymodules/python2.7/vobject/icalendar.py", line 1857, in firstTransition
if not test(dt):
File "/usr/lib/pymodules/python2.7/vobject/icalendar.py", line 1884, in test
def test(dt): return tzinfo.dst(dt) != zeroDelta
File "/usr/lib/python2.7/dist-packages/pytz/tzinfo.py", line 445, in dst
dt = self.localize(dt, is_dst)
File "/usr/lib/python2.7/dist-packages/pytz/tzinfo.py", line 327, in localize
raise NonExistentTimeError(dt)
pytz.exceptions.NonExistentTimeError: 2000-03-26 02:00:00
I expected a iCalendar file with the dtstart value stored with timezone
information. This is how to reproduce the problem:
% python <<EOF
#!/usr/bin/env python
import codecs
import datetime
import pytz
import vobject
def main():
cal = vobject.newFromBehavior('vcalendar')
tz = pytz.timezone('Europe/Oslo')
ve = cal.add('vevent')
dtstart = datetime.datetime(2002, 01, 07, 12, 15, 0, tzinfo=tz)
ve.add('dtstart').value = dtstart
ve.add('summary').value = 'summary'
ve.add('uid').value = 'unique-uid'
cal.prettyPrint()
stream = cal.serialize()
f = codecs.open('plan.ics', 'w')
f.write(stream)
f.close()
if __name__ == '__main__':
main()
EOF
Is there a bug in the library or am I using it wrong?
--
Happy hacking
Petter Reinholdtsen
More information about the Calendarserver-maintainers
mailing list