Mar 11, 2011

Have you tried to access Zimbra or Google Calendar from command line? I have. And I couldn't find any normal command line client that would be able to read and write these calendars, display alerts etc. Well there is a googlecl project , but it's specific for Google Calendar and is not using standard WebDav iCal access methods.

Thus I set out to create console application that would fulfil my needs. What are my requirements?:

  • Read/write access to Google Calendar and Zimbra (at least)
  • Multiple remote calendars
  • Working alerts
  • Nice ncurses UI (but also ability to just display some info and quit)
  • Correct handling of timezones
  • Integration with mail client (open ics files received by email)
  • I guess a lot more :-)

I had a look at existing python modules that work on iCalendar, WebDAV and combination of both. There are quite a few of them, but I just didn't like their APIs. They were usually complex and required knowledge of iCal specification. So I decided to create simplified module that would be easy to understand (even if not so powerful).

I named the project pywebcal (yes, unimaginative) and it's now on github. I would LOVE some input. I know it's far from perfect (or complete), but let's see. For now it offers read-only support for Zimbra (Google should work too but I haven't tested in a while).

You can have a look at the example directory that contains one simple example you can run in-place and see if it works :-) I did my best to create proper test cases covering problems with timezones and whatnot, and this helped me quite a lot with recent refactoring. I am now using vobject library as my backend and it is rather nice to use. Plan is to allow access to vobject components so that my simplified API is not preventing some advanced modifications.

Next step is obviously to start working on ncurses application itself. Anyone wants to help?



Post a Comment
  1. I'll try it out (and send bugs at least :-) )

  2. Hi,

    I'm interested with zimbra calendar access.
    I have just tried the example and I have an error :
    Traceback (most recent call last):
    File "./", line 16, in
    uids = wc.get_calendar_uids()
    File "/home/c0238/Dropbox/dev/python/ical/", line 92, in get_calendar_uids
    tm = resources[k].getLastModified()
    File "/home/c0238/Dropbox/dev/python/ical/Python_WebDAV_Library-0.3.0/src/webdav/", line 363, in getLastModified
    result = _parseIso8601String(datetimeString)
    File "/home/c0238/Dropbox/dev/python/ical/Python_WebDAV_Library-0.3.0/src/webdav/", line 432, in _parseIso8601String
    if "." in date and "Z" in date: # Contains fragments of second?
    TypeError: argument of type 'NoneType' is not iterable