One of the 0.6 developer platform goals is to flatten our Python package hierarchy a bit, so as to make things easier to find, type, access, and remember the names of. Part of this is also switching to naming conventions that are similar to other Python projects of similar size, like Twisted, Zope, etc. The first such flattening we'd like to do is to reorganize the osaf.contentmodel package as follows:

Old name(s)                                New names(s)
-----------------------------------------  -------------------
osaf.contentmodel.ContentModel.*        -> osaf.pim.items.*
osaf.contentmodel.calendar.Calendar.*   -> osaf.pim.calendar.*
osaf.contentmodel.calendar.Recurrence.* -> osaf.pim.recurrence.*
osaf.contentmodel.contacts.Contacts.*   -> osaf.pim.contacts.*
osaf.contentmodel.mail.Mail.*           -> osaf.pim.mail.*
osaf.contentmodel.photos.Photo.*        -> osaf.pim.photos.*
osaf.contentmodel.tasks.Task.*          -> osaf.pim.tasks.*

As you can see, this basically means we'll be removing five directories, moving their contents up a level, and renaming them. The new naming convention is that all module or package names are all-lowercase, and will usually be plural in order to avoid confusion with class names (which usually have an initial capital letter and are singular).

One of the benefits of this change will be making it easier to access many kind classes from CPIAScript and the "headless" tool without creating alternate addressing schemes. These tools can simply "from osaf import pim", and then use e.g. ``pim.Note`` etc. to access the needed classes, etc.

There should be no semantic effects of this move, as we are not making any changes to anything *in* the modules being moved. Currently, the plan is to make these changes next week, and then begin reviewing the resulting schema the following week for general cleanup (which should be a bit easier to do with the flattened structure.)

Please note that if this reorganization would negatively affect the schedule of anything you're working on in the above parcels (or in a parcel that uses them), please contact me as soon as practical so we can co-ordinate the timing of the move to avoid interfering with your work. Also, if you have any questions about the reorganization (or object to it!), please let me know.

One other move that will be taking place, and probably first, is that the CurrentPointer class is being renamed to Reference, and moved to the application.Parcel package. It's also likely that existing CurrentPointer instances will undergo some name changes, and the osaf.current parcel is going away. This is part of our attempt to solidify an addressing scheme for "well-known" objects in Chandler, and to update our policies regarding what data goes in //parcels and what goes in the "soup" (currently called //userdata).

Historically, the distinction between these two repository trees has been read-only vs. read-write; read-only data has been historically put in //parcels, and everything else in //userdata. However, there's a growing consensus that this isn't quite the right distinction, and that instead of read-only vs. read-write, the distinction could and should be "well-known, nameable item or reference" vs. "anonymous items". In other words, items (or references to items) owned by a parcel could indeed be read-write, if it makes sense.

For example, the All, In, Out, and Trash collections are well-known objects, in that they must exist for Chandler to run, and there is code and data that has to reference them at some known location. If the distinction between parcels and "the soup" is just a question of naming, then it makes sense for some parcel to create and own these collections, even though the items that are *in* the collections reside in the soup.

Sometimes, however, a parcel just needs to *refer* to an item by a well-known name, even though the item itself is anonymous. For example, the "me" contact, the "current" account, and so on. In these cases, a parcel will create a Reference whose ``item`` attribute points to the actual item in the soup, while the Reference itself lives in the parcel. Reference objects will therefore be used in place of CurrentPointer objects, and the inverse relationship of ``item`` will be ``references``. This means that any personal parcels that now define a ``currentItemOf`` will need to be changed to use ``references`` instead. There will be a separate posting to announce this change when it happens, which will give more details.

By the way, if you missed my Tuesday post about "Easier access to parcel contents", you might want to have another look. The feature described there is an important part of the above change, because it gives us a uniform addressing scheme for named items that need to be referenced by code. The addressing is based on Python module name, rather than on repository paths or namespace URLs, and provides a convenient way to access a specific parcel's contents from code. It's also much faster than using findPath() or similar operations.

There has also been some discussion about renaming //userdata (perhaps to //soup) to avoid continuing confusion about what that root is used for. //soup more clearly indicates that this is just a soup of anonymous items, and doesn't carry any misleading implication that it's only for the user's data or the only place for read-write data. "userdata" is mentioned only about 30 or so times in the entire Chandler codebase, so such a change would be relatively simple, but it hasn't been finalized yet.

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

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

Reply via email to