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
code: def checkout(self, snapshot_id):
      # Get snapshot object
      snapshot_obj = self.dal.snapshot.get_by_id(snapshot_id)
      code_obj = self.dal.code.get_by_id(snapshot_obj.code_id)
      file_collection_obj = self.dal.file_collection.get_by_id(
          snapshot_obj.file_collection_id
      )
      environment_obj = self.dal.environment.get_by_id(
          snapshot_obj.environment_id
      )
  
      # Check for unstaged changes, if so error with UnstagedChanges
      self.check_unstaged_changes()
  
      # Checkout code to the relevant commit ref
      code_checkout_success = self.code_controller.checkout(code_obj.id)
  
      # Checkout environment to relevant environment id
      environment_checkout_success = (
          self.environment_controller.checkout(environment_obj.id)
      )
  
      # Checkout files to relevant file collection id
      file_checkout_success = self.file_collection_controller.checkout(
          file_collection_obj.id
      )
  
      return (
          code_checkout_success
          and environment_checkout_success
          and file_checkout_success
      )
  
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 6 for calling the SnapshotController obj's underlying member method code with example usage: obj.checkout(snapshot_id) and returns: unknown