I'm hiding the catalog object because I don't want to be dependent of a Catalog object in my folderish object or the object Catalog in the ROOT or you name it. I need this hidden catalog object to catalog only what I want and to do exactly what I need. In this way I am sure that I cannot have problems like: objects cataloged but deleted from Zope and a lot others. The hidden catalog will index only objects that I want to search with it. These objects know to catalog, recatalog or uncatalog automatically(how? very easy, overwrite manage_afterAdd for catalog object when is created, manage_beforeDelete for uncatalog object when is deleted). Using this hidden catalog object the performance is increased, because it handles only my product objects. When the product is delivered, the catalog is configured automatically (all the indexes and metadata are present), no need for the user to do any additional settings. Let's suppose you build your folderish product based on a catalog object in the ROOT. What happens if the somebody index objects other than I need? Or worse, deletes the catalog object? The same problem if I put the catalog object in my folderish product. Another thing: I need certains indexes for my catalog, not all the indexes that could be present in a catalog object in ROOT. Anyway, my product is totally independent of other Zope objects.
return [brain.getObject() for brain in self.__catalog(p_criteria)] Looks nicer indeed. I will give it a try.
Dragos
Max M wrote:
Dragos Chirila wrote:
Hi
I am doing something similarly.
def __searchCatalog(self, p_criteria): """Search catalog""" return self.__catalog(p_criteria)
This returns a list of mybrains objects.
def __getFoundObjects(self, p_list): """gets objects from catalog results""" return map(self.__catalog.getobject, map(getattr, p_list, ('data_record_id_',)*len(p_list)))
It gets a list of mybrains objects and returns a list of zope objects.
Hmm! I think that is a questionable approach.
Indeed, yuk! Don't really know why you're hiding your catalog away in __catalog. Why not just make your code ObjectManager or Folderish and put your catalog in there?
As for "getting found objects":
return [brain.getObject() for brain in self.__catalog(p_criteria)]
...seems a LOT nicer to me.
Chris
-- Simplistix - Content Management, Zope & Python Consulting - http://www.simplistix.co.uk