code: def list(all):
      datasets = []
      for key in REPO:
          name = key
          type = REPO[key]["type"]
          license = REPO[key]["license"]
          year = REPO[key]["year"]
          directory = REPO[key]["cache_dir"]
          if not all:
              if license == "Close":
                  continue
          if license == "Close":
              license = "Close*"
          datasets.append([name, type, license, year, directory])
      datasets = list(
          sorted(
              datasets, key=lambda x: (x[3], x[1], x[0]), reverse=True
          )
      )
      print_table(
          datasets,
          headers=["Name", "Type", "License", "Year", "Directory"],
      )
  
      if all:
          print(f"\n{MISS_URL_ERROR}")
  
imports: import os
  import re
  import shutil
  from enum import Enum
  from os.path import dirname, join
  from typing import Union, List
  import yaml
  from underthesea.corpus import Corpus
  from underthesea.corpus.categorized_corpus import CategorizedCorpus
  from underthesea.corpus.data import Sentence, Label
  from underthesea.file_utils import cached_path, UNDERTHESEA_FOLDER
  from pathlib import Path
  import zipfile
  from underthesea.utils import print_table
label_desc: Use image node_id 4 for calling the DataFetcher obj's underlying member method code with example usage: obj.list(all) without return types