def treeWalk(self, **kwargs):
str_recursePath = '<STR_LIT>'<EOL>str_startPath   = '<STR_LIT:/>'<EOL>f               = None<EOL>ret             = {}<EOL>for key,val in kwargs.items():<EOL><INDENT>if key == '<STR_LIT>':  str_startPath   = val<EOL>if key == '<STR_LIT:f>':          f               = val<EOL><DEDENT>if self.cd(str_startPath)['<STR_LIT:status>']:<EOL><INDENT>ret = f(str_startPath, **kwargs)<EOL>if ret['<STR_LIT:status>']:<EOL><INDENT>for node in self.lstr_lsnode(str_startPath):<EOL><INDENT>if str_startPath == '<STR_LIT:/>': str_recursePath = "<STR_LIT>" % node<EOL>else: str_recursePath = '<STR_LIT>' % (str_startPath, node)<EOL>self.treeWalk(f = f, startPath = str_recursePath)<EOL><DEDENT><DEDENT><DEDENT>return ret<EOL>
Recursively walk through a C_stree, applying a passed function
at each node. The actual "walk" depends on using the 'cd' function
which will only descend into paths that already exist in the
internal path database.

To flush this and explore the pathspace de novo, use treeExplore()
instead.

kwargs:
    --startPath=<startPath> :   The starting point in the tree
    --func=<f> :                The function to apply at each node

    Additional kwargs are passed to <f>

<f> is a function that is called on a node path. It is of form:

    f(path, **kwargs)

where path is a node in the tree space.

<f> must return a dictionary containing at least one field:

    { "status": True | False }

This same dictionary is also returned out to the caller of this
function.