[Zope] stopping indexing of acquired attributes
Luca Olivetti
luca@wetron.es
Tue, 31 Dec 2002 10:13:55 +0100
Luca Olivetti wrote:
> Luca Olivetti wrote:
>
>>
>> 2) the content of the script is
>>
>> attr=getattr(context.aq_explicit,'yourattributename')
>
>
> hmmm, change that to
>
> attr=getattr(context.aq_explicit,'yourattributename',())
>
> if it is to be picked up by a keyword index
>
>> if callable(attr): attr=attr()
>> return attr
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 []).
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.
I can use
attr=getattr(context.aq_explicit,'myattribute',MV)
(in an external method, a python script cannot use Missing)
but that, while giving the correct result to recordify, will still index
the object since the plugin index is expecting another value to indicate
a missing attribute.
If it were possible to import an attribute starting with _ doing
from Products.PluginIndexes.common.Unindex import _merker
attr=getattr(context.aq_explicit,'myattribute',_merker)
will give the correct result for a fieldIndex but would use the wrong
metadata for other indexes.
I may be wrong but I think that the inconsistency between the value used
by the catalog and the various plugin indexes to indicate a missing
value should be fixed, for example they could all import MV from Missing
like Catalog.py does. Should I file this into the collector or there is
another reason I don't know for these inconsistencies?
I can change it myself in my local zope (currently 2.6.1b1) but there's
no point in doing it if the next release will overwrite my changes.
For the time being, do you see another solution besides writing two
methods (one for metadata and the other for indexes)?
TIA
--
Luca Olivetti
Wetron Automatización S.A. http://www.wetron.es/
Tel. +34 93 5883004 Fax +34 93 5883007