Hi Folks,

I'd like to get recurrence working in Chandler in the early 0.6
timeframe.  At the moment, Chandler does't store repeating events in the
repository as anything but a finite number of disconnected events.
There are various problems with this:

- We can't represent indefinitely recurring events in the repository,
currently the only way to create a recurring event is to import it from
iCalendar, and then only the first 10 events are put in the repository
to avoid infinite loops

- There are no affordances for users to manipulate entire recurrence
sets (to permanently reschedule a weekly 10AM meeting to 11AM, for instance)

To get recurrence working well in Chandler, we need to write or choose a
Python class.  Currently, I'm using the recurrence set implementation in
dateutil.rrule when importing iCalendar recurrence sets.  It would be
tempting to use this class for Chandler's concrete implementation of
recurrence, but there are complications.

1) Currently, we're using mxDateTime for datetimes, dateutil.rrule uses
datetime from the Python standard library.  Among other things, mx
offers a variety of date parsers that the standard datetime doesn't.  On
the other hand, the standard datetime is timezone aware with very little
effort.  Right now iCalendar import/export/sharing just converts
datetimes to mxDateTimes.

2) Nick Bastin's forthcoming Python bindings for ICU will offer ICU
datetimes which are just wrappers around ICU datetimes.  These datetimes
will have a whole different collection of methods associated with them
than mx or Python's datetime.  Some methods that we currently use may
not be there (I haven't checked yet), and many of the new methods are
needed for localization.

---------------

It's not particularly hard to convert one datetime class instance to
another, but it would be great to only have one datetime class in use
throughout Chandler.

There will be a lot of code in Chandler that displays datetimes, these
datetimes will need to be localized.  Overall, it might make our lives
easiest to settle on ICU datetimes throughout our content model.  If we
follow this path, to get recurrence working we'll need to:

A) Pry some working bindings out of Nick's tender clutches :).  Nick
says he's got a fair fraction of ICU datetimes working, but the bindings
as a whole aren't done.  My (perhaps naive) hope is to do the work to
get recurrence working using one date time class.

So if we decide to use ICU datetimes through Chandler, it would be great
to start integrating ICU ASAP.  We probably won't be able to switch
everything over yet, since the bindings aren't done, but we could at
least get started switching over datetimes.

B) Either subclass dateutil.rrule to use ICU datetimes, or roll our own
recurrence class.  I'd much prefer the former.  Off the cuff I don't
think it should be terribly hard.

Comment away!

Sincerely,
Jeffrey

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev

Reply via email to