[Chandler-dev] stamping as annotations?
Phillip J. Eby
pje at telecommunity.com
Thu May 18 13:57:53 PDT 2006
At 01:35 PM 5/18/2006 -0700, Grant Baillie wrote:
>In the the annotation scheme of doing things, is there a way for
>different kinds to customize behaviour when getting stamped? For
>example, a certificate might want to encapsulate itself as an
>attachment when stamped as mail, whereas events turn themselves into
>invitations.
Sure, you can delegate some behavior back to the underlying item, via the
annotation's ``itsItem`` attribute. That is, a method on the Stamp can
call back to a method on the original item using ``self.itsItem.whatever()``.
>BTW, the other thing in Katie's email that brought the whole
>interface/adapter model to mind, and maybe a more compelling place
>than stamping, was having items adapt themselves when being displayed
>in different contexts in the UI.
I would translate that as the UI asking for annotations that are specific
to the display context, but certainly adaptation is a possibility there as
well.
The point of using Annotations isn't to substitute for adaptation, it's to
annotate items with additional data. Stamping itself meshes well with that
concept. Adaptation is an somewhat-independent concept that might also be
useful for various things.
Adaptation by itself, however, is *not* a solution to the stamping problem,
because it doesn't address how additional attributes get stored, indexed,
displayed, etc. Annotation solves that problem nicely, and also can do
many of the things that can be done with annotation. The rest of the
things that adaptation does can likely be handled by adding some extra
features to the Stamp base class, for example to return all the stamps that
implement some interface.
I feel I should mention, by the way, in case there's any appearance of
conflicted interest, I actually am a co-author of zope.interface (i.e. I
wrote the zope.interface.advice module) and much of the current
implementation of zope.interface is based on design ideas either borrowed
from PyProtocols or based on an API and terminology design that I
significantly contributed to. So, either way you're going to be using my
code and/or design here. ;-) I just mention this so nobody gets the
impression I'm arguing for the Annotation approach because I wrote it. The
real reason I'm arguing for it is that I wrote it specifically for
Chandler, the repository, and stamping.
Adaptation can do some cool things too, but I'd be wary of introducing
interfaces and adaptation into the pool of things that developers have to
understand in order to play in the platform. I'd want to see whether
less-general mechanisms that are more specific to our platform could work
first, so that instead of having to learn interfaces and adaptation to do
stamping, you just "learn to do stamping".
More information about the chandler-dev
mailing list