Chris Withers wrote:
Luca Olivetti wrote:
I stumbled into another problem: the method is useable for indexes but not for metadata. I digged into the source of ZCatalog and I saw that's because Zcatalog first calls recordify (see Catalog.py) on the object which uses MV (from Missing) to indicate a missing attribute, while each plugin index uses a different method to identify a missing attribute (for example, UnIndex.py defines an internal _merker as []).
Why would hypothesise that the real problem is that adding stuff to indexes ignores AttributeError's and KeyError's which storing it as metadata doesn't, which it should.
Yes, this is the quick fix I finally adopted: --- Catalog.py.orig Tue Dec 31 10:25:44 2002 +++ Catalog.py Tue Dec 31 10:39:28 2002 @@ -400,8 +400,11 @@ record = [] # the unique id is allways the first element for x in self.names: - attr=getattr(object, x, MV) - if(attr is not MV and callable(attr)): attr=attr() + try: + attr=getattr(object, x, MV) + if(attr is not MV and callable(attr)): attr=attr() + except AttributeError: + attr=MV record.append(attr) return tuple(record)
So if my method uses
attr=getattr(context.aq_explicit,'myattribute')
it will tipically work in a plugin index because it's wrapped in a try except block, but will not work with metadata since there's no try/except there.
So put one in yourself ;-) (well, something that works the same...)
attr=getattr(context.aq_explicit,'myattribute',None)
That was the first thing I tried but it didn't (aesthetically) please me: *all* object would be catalogged (it not the same None than the missing value each plugin index and metadata uses). Bye -- Luca Olivetti Wetron Automatización S.A. http://www.wetron.es/ Tel. +34 93 5883004 Fax +34 93 5883007