code: def do_tree(self, path, max_depth, level, full_path, include_stat):
          
          try:
              children = self.get_children(path)
          except (NoNodeError, NoAuthError):
              children = []
  
          for child in children:
              cpath = os.path.join(path, child) if full_path else child
              if include_stat:
                  yield cpath, level, self.stat(os.path.join(path, child))
              else:
                  yield cpath, level
  
              if max_depth == 0 or level + 1 < max_depth:
                  cpath = os.path.join(path, child)
                  for rchild_rlevel_rstat in self.do_tree(cpath, max_depth, level + 1, full_path, include_stat):
                      yield rchild_rlevel_rstat
docs: tree's work horse