序列化日历事件时出错

问题描述 投票:0回答:1

我正在尝试使用 python 2.7 上的 python caldav 库(版本 0.5.0)修改日历。我正在使用以下代码片段向重复事件添加 exdate

for event in results:
    vevent = event.instance.vevent
    if vevent.status.value != "CANCELLED":
        if (vevent.summary.value, vevent.dtstart.value) in cancelled:
            ev = calendar.event_by_uid(vevent.uid.value)
            ev.instance.vevent.add("exdate").value = vevent.dtstart.value
            print ev.instance.vevent.serialize()

尽管 vobject 库声称支持日期时间对象,但最后一行失败了:

Traceback (most recent call last):
  File "./caldavTest.py", line 31, in <module>
    print ev.instance.vevent.serialize()
  File "/usr/lib/python2.7/site-packages/vobject/base.py", line 254, in serialize
    return behavior.serialize(self, buf, lineLength, validate)
  File "/usr/lib/python2.7/site-packages/vobject/behavior.py", line 166, in serialize
    out = base.defaultSerialize(transformed, buf, lineLength)
  File "/usr/lib/python2.7/site-packages/vobject/base.py", line 1007, in defaultSerialize
    child.serialize(outbuf, lineLength, validate=False)
  File "/usr/lib/python2.7/site-packages/vobject/base.py", line 254, in serialize
    return behavior.serialize(self, buf, lineLength, validate)
  File "/usr/lib/python2.7/site-packages/vobject/behavior.py", line 160, in serialize
    transformed = obj.transformFromNative()
  File "/usr/lib/python2.7/site-packages/vobject/base.py", line 226, in transformFromNative
    raise NativeError(msg, lineNumber)
vobject.base.NativeError: "In transformFromNative, unhandled exception on line None <type 'exceptions.TypeError'>: 'datetime.datetime' object has no attribute '__getitem__'"

有什么想法吗?

python caldav vobject
1个回答
0
投票

vobject 中,EXDATE 属性的值是日期时间值的列表

所以,而不是:

ev.instance.vevent.add("exdate").value = vevent.dtstart.value

你的代码应该做类似的事情:

ev.instance.vevent.add("exdate").value.append(vevent.dtstart.value)

这避免了序列化期间报告的异常。

© www.soinside.com 2019 - 2024. All rights reserved.