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: Get current snapshot and return if no unstaged changes
  
  Returns
  -------
  datmo.core.entity.snapshot.Snapshot or None
      current snapshot object state if not unstaged and exists. if DNE return None (should never occur)
  
  Raises
  ------
  UnstagedChanges
      if there are unstaged changes error out because no current snapshot
docstr_tok: ["Get","current","snapshot","and","return","if","no","unstaged","changes","Returns","--","--","--","-","datmo.core.entity.snapshot.Snapshot","or","None","current","snapshot","object","state","if","not","unstaged","and","exists",".","if","DNE","return","None","(","should","never","occur",")","Raises","--","--","--","UnstagedChanges","if","there","are","unstaged","changes","error","out","because","no","current","snapshot"]
code: def current_snapshot(self):
      """Get current snapshot and return if no unstaged changes
  
      Returns
      -------
      datmo.core.entity.snapshot.Snapshot or None
          current snapshot object state if not unstaged and exists. if DNE return None (should never occur)
  
      Raises
      ------
      UnstagedChanges
          if there are unstaged changes error out because no current snapshot
      """
      current_code_obj = self.code_controller.current_code()
      current_environment_obj = (
          self.environment_controller.current_environment()
      )
      current_file_collection_obj = (
          self.file_collection_controller.current_file_collection()
      )
  
      # If snapshot object with required args already exists, return it
      query = {
          "model_id": self.model.id,
          "code_id": current_code_obj.id,
          "environment_id": current_environment_obj.id,
          "file_collection_id": current_file_collection_obj.id,
      }
      results = self.dal.snapshot.query(
          query, sort_key="created_at", sort_order="descending"
      )
      return results[0] if results else None
  
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 2 for calling the SnapshotController obj's underlying member method code with example usage: obj.current_snapshot() and returns: unknown