iCalendar package for Python
THIS IS NO LONGER THE HOME FOR THIS PACKAGE!
Visit codespeak instead
http://codespeak.net/icalendar/
Summary
I have often needed to parse and generate iCalendar files. Finally I got tired of writing ad-hoc tools.
So this is my attempt at making an iCalendar package for Python. The inspiration has come from the email package in the standard lib, which I think is pretty simple, yet efficient and powerfull.
The aim is to make a package that is fully compliant to RFC 2445, well designed, simple to use and well documented.
Look in doc/example.py for introductory doctests and explanations.
All modules and classes have doctest that shows how they work, so it is all pretty well documented.
It can generate and parse iCalender files, and can easily be used as is.
But it does needs a bit more polish before i will considder it finished. I would say that it's about 95% done.
Examples
To open and parse a file:
>>> from iCalendar import Calendar, Event
>>> cal = Calendar.from_string(open('test.ics','rb').read())
>>> cal
VCALENDAR({'VERSION': '2.0', 'METHOD': 'Request', 'PRODID': '-//My product//mxm.dk/'})
>>> for component in cal.walk():
... component.name
'VCALENDAR'
'VEVENT'
'VEVENT'
To create a calendar and write it to disc:
>>> cal = Calendar()
>>> from datetime import datetime
>>> from iCalendar import UTC # timezone
>>> cal.add('prodid', '-//My calendar product//mxm.dk//')
>>> cal.add('version', '2.0')
>>> event = Event()
>>> event.add('summary', 'Python meeting about calendaring')
>>> event.add('dtstart', datetime(2005,4,4,8,0,0,tzinfo=UTC()))
>>> event.add('dtend', datetime(2005,4,4,10,0,0,tzinfo=UTC()))
>>> event.add('dtstamp', datetime(2005,4,4,0,10,0,tzinfo=UTC()))
>>> event['uid'] = '20050115T101010/27346262376@mxm.dk'
>>> event.add('priority', 5)
>>> cal.add_component(event)
>>> f = open('example.ics', 'wb')
>>> f.write(cal.as_string())
>>> f.close()
Note!
This is the first public release, so it is most likely buggy in some degree. But it is usable for production.
It is dependent on the datetime package, so it requires Python >= 2.2
Feedback/contact
If you have any comments or feedback on the module, please contact me at: maxm@mxm.dk
I would love to hear use cases, or get ideas for improvements.
Download
Get the latest version from the download page
License
LGPL (I have changed the license, the readme will reflect this in the next release.)
iCal parsing - newlines
i think it would be good to have an option to modify the newline parsing/writing so it can use \n as well as \r\n. Or are there some other way of getting the icals work with for example MS Outlook?
Recurrencies...
Here's a test case, from an event generated by Microsoft Exchange and that _looks_ like it ought to be RFC-compliant (at least from what I could gather from reading the RFC...)
>>> vr = vRecur.from_ical('FREQ=DAILY;COUNT=5;INTERVAL=1;BYDAY=MO, TU, WE, TH, FR;WKST=SU')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "./icalendar/prop.py", line 932, in from_ical
raise ValueError, 'Error in recurrence rule: %s' % ical
(Rui Carmo, from http://the.taoofmac.com)
can't use GPL on our "paying" projects, but LGPL usually works. I'd like to say money is involved, but
that's not an option, as mixed-licensing causes the legal department headaches. Our product itself is
on the fast track to LGPL (or BSD).
Replies to this comment