code: def tree(path, depth=2, topdown=True, followlinks=False, showhidden=False):
      
      rt = []
      for root, dirs, files in os.walk(path, topdown=topdown, followlinks=followlinks):
          if not showhidden and File.is_hidden(root):
              continue
  
          current_depth = len(os.path.relpath(root, path).split(os.sep))
          if current_depth > depth:
              continue
  
          if showhidden:
              _tuple = (
                  root,
                  [File(os.path.join(root, _dir)) for _dir in dirs],
                  [File(os.path.join(root, _file)) for _file in files]
              )
          else:
              _tuple = (
                  root,
                  [File(os.path.join(root, _dir)) for _dir in dirs if _dir[0] != '.'],
                  [File(os.path.join(root, _file)) for _file in files if _file[0] != '.']
              )
  
          rt.append(_tuple)
      return rt
docs: A generator return a tuple with three elements (root, dirs, files).