class_docstr: SnapshotController inherits from BaseController and manages business logic related to snapshots
  
  Attributes
  ----------
  code : datmo.core.controller.code.code.CodeController
  file_collection : datmo.core.controller.file.file_collection.FileCollectionController
  environment : datmo.core.controller.environment.environment.EnvironmentController
  
  Methods
  -------
  create(dictionary)
      Create a snapshot within the project
  checkout(id)
      Checkout to a specific snapshot within the project
  list(visible=None, sort_key=None, sort_order=None)
      List all snapshots present within the project based on given filters
  delete(id)
      Delete the snapshot specified from the project
docstr: Update the snapshot metadata
docstr_tok: ["Update","the","snapshot","metadata"]
code: def update(
      self,
      snapshot_id,
      config=None,
      stats=None,
      message=None,
      label=None,
      visible=None,
  ):
      """Update the snapshot metadata"""
      if not snapshot_id:
          raise RequiredArgumentMissing(
              __(
                  "error",
                  "controller.snapshot.delete.arg",
                  "snapshot_id",
              )
          )
      update_snapshot_input_dict = {"id": snapshot_id}
      validate(
          "update_snapshot",
          {
              "config": config,
              "stats": stats,
              "message": message,
              "label": label,
              "visible": visible,
          },
      )
      if config is not None:
          update_snapshot_input_dict["config"] = config
      if stats is not None:
          update_snapshot_input_dict["stats"] = stats
      if message is not None:
          update_snapshot_input_dict["message"] = message
      if label is not None:
          update_snapshot_input_dict["label"] = label
      if visible is not None:
          update_snapshot_input_dict["visible"] = visible
  
      return self.dal.snapshot.update(update_snapshot_input_dict)
  
imports: import os
  from datmo.core.controller.base import BaseController
  from datmo.core.controller.code.code import CodeController
  from datmo.core.controller.file.file_collection import FileCollectionController
  from datmo.core.controller.environment.environment import EnvironmentController
  from datmo.core.entity.snapshot import Snapshot
  from datmo.core.util.i18n import get
  from datmo.core.util.validation import validate
  from datmo.core.util.json_store import JSONStore
  from datmo.core.util.exceptions import FileIOError, RequiredArgumentMissing, ProjectNotInitialized, EntityNotFound, TaskNotComplete, DoesNotExist, UnstagedChanges
label_desc: Use image node_id 8 for calling the SnapshotController obj's underlying member method code with example usage: obj.update(snapshot_id, config, stats, message, label, visible) and returns: self