docs: def walknode(top, skiphidden=True):
      """Returns a recursive iterator over all Nodes under top.
      
      If skiphidden is True (the default) then structure branches starting with
      an underscore will be ignored.
      """
      if skiphidden and top.name.startswith('._'):
          return
          
      yield top
      for child in top:
          for c in walknode(child):
              yield c