Libraries, libraries and more libraries

The last post might make it seem that building a printable calendar was easy going. But it wasn't...

As it turns out, the ical format, while well-defined, isn't well supported in the Python world...

In order to properly read the ical file itself, we had to use the icalendar library.

However, this library didn't support recurring events ("RRULE" entries), so we used the dateutil library for that.

Neither of these support timezones, so we used a third library for that. (Worse: the default Python timezone library isn't App Engine compatible, so we needed to monkey-patch it using the GAE variant.)

Between these three libraries, we had pretty much everything we needed to display all the events on the client's calendar, as required.