Dieter Maurer writes:
Brad Knotwell writes:
My application has two custom objects types (one of them is folderish). I'm trying to add a view to the folderish object that'll aggregate statistics information on the lower-levels of the tree.
Specifically, I'd like a flavor for how to do the following:
traverse a tree w/o rendering it test an object's type if an object is a specific type: update counters appropriately based on the internal state of the object
render the results
Since I only want to traverse the tree (not render it), am I correct in presuming dtml-tree isn't my friend in this case and I'll need to work in straight Python instead? You are correct.
Look at the code of "OFS.FindSupport.ZopeFind" and see how it implements traversal.
Do the same in either an External Method or a Python Script (here several access restrictions will apply).
Dieter
For our other readers, here's some example code to traverse a tree and aggregate information (based on meta_type as well as the Status field of my custom ZClass). I had planned to create a Statistics class in the script, but I got permissions errors when I tried to instantiate the object. As a result, I keep state in the function and the code looks a trifle odd. --Brad def traverseTree(tree_root): untested = passed = failed = notest = 0 for object in tree_root.objectValues(): if object.meta_type == 'Test Case Folder': subres = traverseTree(object) untested = untested + subres[0] passed = passed + subres[1] failed = failed + subres[2] notest = notest + subres[3] elif object.meta_type == 'Test Case': if object.Status == 'Untested': untested = untested + 1 elif object.Status == 'Pass': passed = passed + 1 elif object.Status == 'Fail': failed = failed + 1 elif object.Status == 'Notest': notest = notest + 1 else: untested = untested + 1 return(untested,passed,failed,notest) print 'Untested(%d):Passed(%d):Failed(%d):Notest(%d)' % traverseTree(context) return printed