Well.. it turned out to be more subtle. It goes back to the old problem that getPersistentItemIDs doesn't return a real list, but rather a BTreeItems object. When you call manage_delete on *one* item, it affects the BTreesItems object you are iterating over! This works: ## Script (Python) "deleteAllTracks" ##bind container=container ##bind context=context ##bind namespace= ##bind script=script ##bind subpath=traverse_subpath ##parameters= ##title= ## trackMaster=context.Tracks import string iList=[] for id in trackMaster.defaultRack.getPersistentItemIDs(): iList.append(id) dList=[] for id in iList: theItem=trackMaster.getItem(id) theItem.manage_delete() dList.append(id) return ("OK! deleted %i elements" % len(iList)) + string.join(iList,',') On Wednesday, May 23, 2001, at 10:59 AM, Steve Alexander wrote:
Steve Spicklemire wrote:
Has anyone seen anything like this? <snip> It works.. partially. For some reason it looks like getPersistentItemIDs does not always return a *complete* list. I need to run this method several times to completely exhaust the Rack's storage.
Yes, I've seen this. It's on my list of things to look into when I've got a certain large project out of the way :-/
Thoughts?
Well, getPersistentItemIDs() just returns the result of calling keys() on the Rack's BTree.
I guess it is a problem with the BTree code.
I doubt it'll be fixed though. Instead, we should update Rack to use the new BTrees module.
-- Steve Alexander Software Engineer Cat-Box limited
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )