code: def list_files(self, prefix, flat):
      
  
      layer_path = self.get_path_to_file("")        
      path = os.path.join(layer_path, prefix) + '*'
  
      filenames = []
  
      remove = layer_path
      if len(remove) and remove[-1] != '/':
        remove += '/'
  
      if flat:
        for file_path in glob(path):
          if not os.path.isfile(file_path):
            continue
          filename = file_path.replace(remove, '')
          filenames.append(filename)
      else:
        subdir = os.path.join(layer_path, os.path.dirname(prefix))
        for root, dirs, files in os.walk(subdir):
          files = [ os.path.join(root, f) for f in files ]
          files = [ f.replace(remove, '') for f in files ]
          files = [ f for f in files if f[:len(prefix)] == prefix ]
          
          for filename in files:
            filenames.append(filename)
      
      def stripgz(fname):
        (base, ext) = os.path.splitext(fname)
        if ext == '.gz':
          return base
        else:
          return fname
  
      filenames = list(map(stripgz, filenames))
      return _radix_sort(filenames).__iter__()
docs: List the files in the layer with the given prefix. 
  
      flat means only generate one level of a directory,
      while non-flat means generate all file paths with that 
      prefix.