Skip to content

Fails to read RDATE values specified using PERIOD data type #141

Description

@da4089

Quick Summary
The vobject parser appears to ignore RDATE lines with a PERIOD value type.

Context

  • vObject 0.9.9
  • Python 3.14
  • OS: Debian 13/amd64

Description
When specifying a recurring event, using an RRULE with a non-standard recurrence supplied using RDATE with a PERIOD value type, the resulting vobject's rruleset does not include the RDATE recurrence.

RDATE recurrences using DATE-TIME value type are correctly added to the rruleset.

To Reproduce
See the script below. Note that the value of a DOES NOT include the first two RDATE recurrences (which use a PERIOD value type), but DOES include the third recurrence (which uses a DATE-TIME value type).

import vobject

raw = "BEGIN:VCALENDAR\r\n" \
      + "VERSION:2.0\r\n" \
      + "PRODID:test\r\n" \
      + "BEGIN:VEVENT\r\n" \
      + "UID:test\r\n" \
      + "DTSTART:20000101T000000Z\r\n" \
      + "DURATION:PT1H\r\n" \
      + "DTSTAMP:20000101T000000Z\r\n" \
      + "RDATE;VALUE=PERIOD:20000102T000000Z/PT2H\r\n" \
      + "RDATE;VALUE=PERIOD:20000103T000000Z/20000103T000300Z\r\n" \
      + "RDATE:20000104T040000Z\r\n" \
      + "EXDATE:20000115T000000Z,20000129T000000Z\r\n" \
      + "RRULE:FREQ=WEEKLY\r\n" \
      + "END:VEVENT\r\n" \
      + "END:VCALENDAR\r\n"

obj = vobject.readOne(raw)
vevent = obj.contents['vevent'][0]
rruleset = vevent.getrruleset()

# Set starting timestamp to DTSTART of recurrence.
start = vevent.dtstart.value

# Fetch first 10 recurrences.
a = list(rruleset.xafter(start, 10, True))

# Advance starting point to the timestamp of the last-fetched recurrence.
start = a[-1]

# Fetch next 10 recurrences.
b = list(rruleset.xafter(start, 10))

Further Notes
See also issue #133.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions