class_docstr: FileCollectionController inherits from BaseController and manages business logic related to the
  file system.
  
  Methods
  -------
  create(paths)
      create a file collection within the project
  list()
      list all file collections within the project
  delete(id)
      delete the specified file collection from the project
class_docstr_tok: ["FileCollectionController","inherits","from","BaseController","and","manages","business","logic","related","to","the","file","system",".","Methods","--","--","--","-","create","(","paths",")","create","a","file","collection","within","the","project","list","(",")","list","all","file","collections","within","the","project","delete","(","id",")","delete","the","specified","file","collection","from","the","project"]
docstr: Return the file hash of the file collections filepaths for project files directory.
  If files_directory not present then will assume it is empty
  
  Returns
  -------
  str
      unique hash of the project files directory
docstr_tok: ["Return","the","file","hash","of","the","file","collections","filepaths","for","project","files","directory",".","If","files_directory","not","present","then","will","assume","it","is","empty","Returns","--","--","--","-","str","unique","hash","of","the","project","files","directory"]
code: def _calculate_project_files_hash(self):
      """Return the file hash of the file collections filepaths for project files directory.
      If files_directory not present then will assume it is empty
  
      Returns
      -------
      str
          unique hash of the project files directory
      """
      # Populate paths from the project files directory
      paths = []
      if os.path.isdir(self.file_driver.files_directory):
          paths.extend(
              [
                  os.path.join(
                      self.file_driver.files_directory, filepath
                  )
                  for filepath in list_all_filepaths(
                      self.file_driver.files_directory
                  )
              ]
          )
  
      # Create a temp dir to use for calculating the hash
      _temp_dir = get_datmo_temp_path(self.home)
  
      # Hash the paths of the files
      dirhash = self.file_driver.calculate_hash_paths(paths, _temp_dir)
  
      # Remove temporary directory
      shutil.rmtree(_temp_dir)
  
      return dirhash
  
file_path: datmo/datmo/core/controller/file/file_collection.py
imports: import os
  import shutil
  from datmo.core.util.i18n import get
  from datmo.core.controller.base import BaseController
  from datmo.core.util.misc_functions import list_all_filepaths, get_datmo_temp_path
  from datmo.core.entity.file_collection import FileCollection
  from datmo.core.util.exceptions import PathDoesNotExist, EnvironmentInitFailed, FileNotInitialized, UnstagedChanges
label_desc: Use image node_id 7 for calling the FileCollectionController obj's underlying member method code with example usage: obj._calculate_project_files_hash() and returns: dirhash