pyhthon error triggered by calendar.occurrences

(this is not ‘mission critical’ for us, so I’m writing here instead of opening a ticket)

hello, I’m trying to iterate over events of a specific day in a users calendar, like so

day_start = datetime.strptime('2018-01-01', '%Y-%m-%d')
day_end = datetime.strptime('2018-01-31', '%Y-%m-%d')

server  = kopano.Server(...)
calendar = server.user(...).store.calendar
for item in calendar.occurrences(day_start, day_end):
  # do something

the error I’m getting is:

Traceback (most recent call last):
  File "script.py", line 52, in <module>
    for item in calendar.occurrences(start_time, end_time):
  File "/usr/lib/python2.7/dist-packages/kopano/folder.py", line 390, in occurrences
    for occurrence in self.item(entryid).occurrences(start, end):
  File "/usr/lib/python2.7/dist-packages/kopano/appointment.py", line 103, in occurrences
    for occ in self.recurrence.occurrences(start=start, end=end):
  File "/usr/lib/python2.7/dist-packages/kopano/recurrence.py", line 914, in occurrences
    recurrences = recurrences.between(_utils._from_gmt(start, tz), _utils._from_gmt(end, tz))
  File "/usr/lib/python2.7/dist-packages/kopano/utils.py", line 202, in _from_gmt
    return date - datetime.timedelta(minutes=_get_timezone(date, tz_data))
  File "/usr/lib/python2.7/dist-packages/kopano/utils.py", line 188, in _get_timezone
    dst = _in_dst(date, dststartmonth, dststartweek, dststarthour, dstendmonth, dstendweek, dstendhour)
  File "/usr/lib/python2.7/dist-packages/kopano/utils.py", line 164, in _in_dst
    dststart = datetime.datetime(date.year, dststartmonth, 1) + \
ValueError: month must be in 1..12

I’m on latest kopano 8.6.7.0-0+16.1 supported/stable from the debian repositories

sorry for the late reply.

we recently added a check to 8.6 for when dststartmonth==0, so here it almost has to be larger than 12… :S

would it be possible to give us the value of the local variable ‘tz_data’, as it’s possibly corrupted?

I usually do this by copying /usr/lib/…/kopano locally, and adding a print statement in there.

you could also print(self.subject, self.start) in appointment.py, line 102 or so, to check out which appointment we are dealing with.

PS you can also use datetime(2018, 1, 2) if you’re not aware, so no need for strptime

PS2 user.calendar can also be used instead of user.store.calendar (and anything else this way which is not ambiguous)