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. So, to search the catalog (in my case the __catalog is the ZCatalog instance): results = self.__getFoundObjects(self.__catalog(filter)) The filter mut be a dictionary, something like: {'meta_type': 'File'}. I think that you must write like: obj=self.Catalog('id':item} if you want to search by id. Hope this will help Dragos
Dear Zopers
This time, I thought it should be simple, but I am struggling again: The idea was to search for items that have been catalogued successfully. In the Zope Book they describe how to do this using form and scripts. That works for me, too, but then I need to search in a regular Python program (An FS product). For this purpose, I found the ZCatalog.search method and gave it a try, but I cannot get it to work. It expects a dictionary, but what does that contain?
Here is what I have so far:
__init__(self, id, title, ...): ... # add a Catalog _catalog = ZCatalog('Catalog')
# add Metadata fields for the Catalog _catalog.addColumn('id') _catalog.addColumn('title') _catalog.addColumn('icon')
# PathIndex _catalog.addIndex('path_index', 'PathIndex')
# ZCTextIndex (with the required Lexicon) class Extra: """ Just a dummy to build records for the Lexicon. """ pass extra = Extra() extra.index_type = 'Okapi BM25 Rank' extra.lexicon_id = 'Lexicon' _catalog._setObject('Lexicon', PLexicon('Lexicon', '', Splitter(), CaseNormalizer())) _catalog.addIndex('title', 'ZCTextIndex', extra)
# FieldIndex _catalog.addIndex('composer_first_name_index', 'FieldIndex', 'first_name') _catalog.addIndex('composer_last_name_index', 'FieldIndex', 'last_name') _catalog.addIndex('composer_year_of_birth_index', 'FieldIndex', 'year_of_birth')
self._setObject('Catalog', _catalog)
... # all new items get catalogued (verified) and now we should be able to search for them like this (???):
def searchForAnItem(item) obj=self.Catalog(id={'query':[item]})
What is wrong here? I feel very stupid again. Any help is appreciated!
Thanks and kind regards Andre
_______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )