[Zope-dev] Updating a ZCatalog when objects in it change their path
Chris Withers
chrisw@nipltd.com
Sat, 30 Dec 2000 17:19:42 +0000
cheers :-)
if people start bitching that it's too slow, I'll give this a go...
Chris
Steve Alexander wrote:
>
> Chris Withers wrote:
>
> >
> > However, the only way I could find to solve it was to add a
> > manage_afterAdd method to Squishdot Sites which recatalogued all
> > postings. This is a _lot_ more resource intensive than it needs to be,
> > since I don't actually want to recatalog all postings (quite expensive
> > when there are 3000+ of them ;-), I just want to modify the paths that
> > ZCatalog has stored.
> >
> > Is there any way to do this? There probably should be ;-)
>
> Look in the new ZCatalog product (released for testing a few weeks ago),
> in the manage_normalize_paths method of ZCatalog.py (line 603).
>
> This method goes through every item in the Catalog, and checks to see if
> its path needs to be changed to the new convention of using the physical
> path to the object.
>
> You could use a modified version of this method to do what you want,
> calling it from manage_afterAdd. You may need to store the old path to
> the ZCatalog instance in an attribute, so you'll know how to change the
> paths.
>
> The following code should help, although I haven't tested it. It is
> shamelessly cribbed from Chris P's manage_normalize_paths method.
>
> paths = self._catalog.paths
> uids = self._catalog.uids
>
> for path, rid in uids.items():
> new_path=_method_to_return_new_path_after_add(path)
> del uids[path]
> paths[rid] = new_path
> uids[ppath] = rid
>
> --
> Steve Alexander
> Software Engineer
> Cat-Box limited
> http://www.cat-box.net