[Calendarserver-maintainers] Bug#849924: Bug#849924: python-vobject: Fail to return end date for ended recurring VEVENT
Guido Günther
agx at sigxcpu.org
Mon Jan 2 12:25:07 UTC 2017
Hi Petter,
On Mon, Jan 02, 2017 at 11:50:14AM +0100, Petter Reinholdtsen wrote:
>
> Package: python-vobject
> Version: 0.8.1c-4
>
> I ran into this problem while trying to find all recurring VEVENT that
> are no longer relevant in my iCalendar file. The documented way to find
> the last time the event would trigger give an exception. Here is a
> small program demonstrating the problem:
>
> #!/bin/sh
> # Minimal example code to demonstrate problem with vobject python
> # library. Running it give this error:
> # Traceback (most recent call last):
> # File "test.py", line 12, in <module>
> # print ruleset[-1]
> # File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py", line 151, in __getitem__
> # return list(iter(self))[item]
> # File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py", line 897, in _iter
> # while exlist and exlist[0] < ritem:
> # File "/usr/lib/python2.7/dist-packages/dateutil/rrule.py", line 849, in __lt__
> # return self.dt < other.dt
> # TypeError: can't compare offset-naive and offset-aware datetimes
>
>
> cat > test.ics <<EOF
> BEGIN:VCALENDAR
> PRODID:-//Manual test example//NONSGML pere 1.0//EN
> VERSION:2.0
> BEGIN:VTIMEZONE
> TZID:Europe/Oslo
> BEGIN:STANDARD
> TZNAME:CET
> TZOFFSETFROM:+0043
> TZOFFSETTO:+0100
> DTSTART:19011213T212852
> RDATE;VALUE=DATE-TIME:19011213T212852
> END:STANDARD
> BEGIN:DAYLIGHT
> TZNAME:CEST
> TZOFFSETFROM:+0100
> TZOFFSETTO:+0200
> DTSTART:19810329T020000
> RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
> END:DAYLIGHT
> BEGIN:DAYLIGHT
> TZNAME:CEST
> TZOFFSETFROM:+0100
> TZOFFSETTO:+0200
> DTSTART:19160522T010000
> RDATE;VALUE=DATE-TIME:19160522T010000
> RDATE;VALUE=DATE-TIME:19400810T230000
> RDATE;VALUE=DATE-TIME:19430329T020000
> RDATE;VALUE=DATE-TIME:19440403T020000
> RDATE;VALUE=DATE-TIME:19450402T020000
> RDATE;VALUE=DATE-TIME:19590315T020000
> RDATE;VALUE=DATE-TIME:19600320T020000
> RDATE;VALUE=DATE-TIME:19610319T020000
> RDATE;VALUE=DATE-TIME:19620318T020000
> RDATE;VALUE=DATE-TIME:19630317T020000
> RDATE;VALUE=DATE-TIME:19640315T020000
> RDATE;VALUE=DATE-TIME:19650425T020000
> RDATE;VALUE=DATE-TIME:19800406T020000
> END:DAYLIGHT
> BEGIN:STANDARD
> TZNAME:CET
> TZOFFSETFROM:+0200
> TZOFFSETTO:+0100
> DTSTART:19800928T030000
> RRULE:FREQ=YEARLY;COUNT=16;BYDAY=-1SU;BYMONTH=9
> END:STANDARD
> BEGIN:STANDARD
> TZNAME:CET
> TZOFFSETFROM:+0200
> TZOFFSETTO:+0100
> DTSTART:19961027T030000
> RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
> END:STANDARD
> BEGIN:STANDARD
> TZNAME:CET
> TZOFFSETFROM:+0200
> TZOFFSETTO:+0100
> DTSTART:19160930T000000
> RDATE;VALUE=DATE-TIME:19160930T000000
> RDATE;VALUE=DATE-TIME:19421102T030000
> RDATE;VALUE=DATE-TIME:19431004T030000
> RDATE;VALUE=DATE-TIME:19441002T030000
> RDATE;VALUE=DATE-TIME:19451001T030000
> RDATE;VALUE=DATE-TIME:19590920T030000
> RDATE;VALUE=DATE-TIME:19600918T030000
> RDATE;VALUE=DATE-TIME:19610917T030000
> RDATE;VALUE=DATE-TIME:19620916T030000
> RDATE;VALUE=DATE-TIME:19630915T030000
> RDATE;VALUE=DATE-TIME:19640920T030000
> RDATE;VALUE=DATE-TIME:19650919T030000
> END:STANDARD
> END:VTIMEZONE
> BEGIN:VEVENT
> UID:3a29cf0e-b2de-430b-894f-9a07634fc875
> DTSTART;TZID=Europe/Oslo:20160427T180000
> DTEND;TZID=Europe/Oslo:20160427T190000
> CREATED:20160412T202645Z
> DTSTAMP:20160529T080325Z
> EXDATE;VALUE=DATE:20160504
> EXDATE;VALUE=DATE:20160608
> LAST-MODIFIED:20160529T080325Z
> RRULE:FREQ=WEEKLY;UNTIL=20160615T160000Z;BYDAY=WE
> SEQUENCE:2
> SUMMARY:Something is about to happen
> TRANSP:OPAQUE
> END:VEVENT
> END:VCALENDAR
> EOF
>
> cat > test.py <<EOF
> #!/usr/bin/env python
> import vobject
> icalstream = open("test.ics")
> components = vobject.readComponents(icalstream, validate=True)
> cal = components.next()
>
> print cal.prettyPrint();
>
> for event in cal.vevent_list:
> print event.prettyPrint()
> ruleset = event.getrruleset()
> print ruleset[-1] # XXX This one fail
> EOF
> python test.py
> rm test.py test.ics
>
>
> Am I using the library wrong? Is there some other way to figure out the
> last date for a recurring event, if there is a limit?
Thanks for the testcase! I'd suggest to file these things
upstream too (using a recent version):
https://github.com/eventable/vobject/issues
since I'm currently not in a position to track them due to lack of time.
Cheers,
-- Guido
More information about the Calendarserver-maintainers
mailing list