[Zope] manipulating catalog brains directly?

Rob Miller ra at burningman.com
Mon Apr 26 22:02:02 EDT 2004


hi,

i'm trying to migrate a group of CMFCollectors from a Zope-2.6.2, 
Plone-1.0.5 site to a Zope-2.7, Plone-2.0 site.  they're coming through 
mostly okay, but the Collector Catalog shows up on the destination site 
with 2 catalog entries for each issue, instead of just one.

this wouldn't be so bad, except that NONE of the catalog entries are 
actually correct.  one set of entries is mostly correct, except that 
they contain the wrong path to the collector issues (the location of the 
portal within the Zope site has changed).  the other set of catalog 
entries has the correct paths, but are lacking all of the OTHER 
pertinent pieces of data, such as review_state, assigned_to, etc.

what i'm trying to do is to copy the information from the old catalog 
entries to the ones with the correct path, so that i can run "catalog 
update" to purge the old entries.  in an external method i've got some 
code like this:



def fixCollectorCatalog(self):
     import string
     catalog = self.get_internal_catalog()
     oldbrain = catalog.search(query_request={'path':'/old/path', 
'id':'42'})[0]
     newbrain = catalog.search(query_request={'path':'/new/path', 
'id':'42'})[0]
     out = "%s: %s" % (newbrain.id, str(newbrain.assigned_to))
     newbrain.assigned_to = ('testuser1', 'testuser2',)
     out += '\n\n%s: %s' % (newbrain.id, str(newbrain.assigned_to))

     return out


when i run this code, the output shows that the second access of 
'newbrain.assigned_to' DOES actually contain the tuple that i hardcoded. 
  this only lasts for the duration of the current request, though; the 
value returns to its original value on subsequent searches.

how do i make my edits stick?  or is there some other way to bring my 
catalog into sync with my collector's new location?

many thanks for any help,

-r




More information about the Zope mailing list