[Zope3-Users] Re: Utility Local to an Annotation?
Derek Richardson
derek.richardson at gatech.edu
Fri Apr 27 10:16:22 EDT 2007
Martin Aspeli wrote:
> Derek Richardson-2 wrote:
>> Benji York wrote:
>>> Derek Richardson wrote:
>>>> The specific case is uuids for atom feed entries. We have annotations
>>>> representing feeds and I would like my uuid utility to be local to the
>>>> feed annotation, thus recording and making available uuids only for
>>>> entries in that feed.
>>> How about a multi-adapter from content and feed to UUID?
>> Hmmm, to do that I have to be able to annotate an annotation, right? As
>> the feed is an annotation and that is where I want to store the UUIDs. I
>> tried this tonight and was unable to make it work - I got the following:
> There's no reason why you can't mark an object that you fish out of an
> annotation with IAttributeAnnotatable and then annotate that. However, this
> feels suspiciously like you're asking the wrong kind question. :)
>
> Can you explain (a) what you are trying to store (what is a "feed" in this
> case? is it just feed-specific metadata? or an actual list of items rendered
> to RDF?) and (b) what you need UUIDs for and (c) when you need to use the
> UUIDS?
Yes, it does feel like I'm going about this the wrong way.
a - The "feed" is actually just configuration metadata - whether the
feed is enabled, whether it is recursive, what its display name is, etc.
The actual feed document is not stored - it is simply rendered
dynamically when requested, based on the metadata and the existent
content items. The "feed" is an annotation on a container; at the
current time, only folders are feeds and only contained files are feed
items.
b - In the Atom syndication format, UUIDs are necessary for two things.
One, the overall feed has a UUID. This is easy - I'm storing them in a
site-local named utility, indexed by the feed annotation object. Two,
each entry in a feed has a UUID. A content item that is an entry (a
file, in the current case) can, however, be in multiple feeds and needs
a different UUID in each. Thus, I need to be able to look up UUIDs by
the content object that will be rendered as a feed entry and look them
up relative to the feed, rather than globally.
c - I use the UUIDs only when rendering the feed, looking them up by
object and sending them to the client embedded in the feed document.
They are used for no other purpose.
So, my situation is that I've written my nifty uuid utility based on
intid and I want to reuse it for feed entry UUID lookup. I can't use
unnamed utilities because I may be accessing different uuid utilities
for entries from the same place in the tree. It occurs to me that I
could make them named utilities local to the object underlying the entry
and look them up by the feed UUID they correspond to, but, in my
understanding, that would require littering sites all over the place,
which seems like bad citizenship. So, I thought I'd just attach the
utility to the "feed" (remember, metadata), so that I can access it
through an adapter. Benji's short post gave me this idea. An alternative
is perhaps that I can just directly use the uuid utility class from the
"feed" class and avoid the annotations but have the same effect. In
fact, since the UUID lookup is an integral part of the feed and not just
an after-thought, this might indeed be more appropriate (and simpler)
than the annotation. Both these approaches that I favor (annotations and
direct usage) tightly couple the "feed" to the utility implementation,
which is unfortunate if I want to swap in another uuid utility
implementation (and, from what I've heard, this will be likely when I
backport to Five).
I hope this additional background makes things clearer.
Thanks,
Derek
More information about the Zope3-users
mailing list