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: Attempts to find a file within the file collection
  
  Returns
  -------
  dict
      output dictionary of the JSON file
docstr_tok: ["Attempts","to","find","a","file","within","the","file","collection","Returns","--","--","--","-","dict","output","dictionary","of","the","JSON","file"]
code: def _find_in_filecollection(self, file_to_find, file_collection_id):
      """Attempts to find a file within the file collection
  
      Returns
      -------
      dict
          output dictionary of the JSON file
      """
  
      file_collection_obj = (
          self.file_collection_controller.dal.file_collection.get_by_id(
              file_collection_id
          )
      )
      file_collection_path = self.file_collection_controller.file_driver.get_collection_path(
          file_collection_obj.filehash
      )
      # find all of the possible paths it could exist
      possible_paths = [os.path.join(self.home, file_to_find)] + [
          os.path.join(self.home, item[0], file_to_find)
          for item in os.walk(file_collection_path)
      ]
      existing_possible_paths = [
          possible_path
          for possible_path in possible_paths
          if os.path.isfile(possible_path)
      ]
      if not existing_possible_paths:
          # TODO: Add some info / warning that no file was found
          # create some default stats
          return {}
      else:
          # If any such path exists, transform file to stats dict
          json_file = JSONStore(existing_possible_paths[0])
          return json_file.to_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 17 for calling the SnapshotController obj's underlying member method code with example usage: obj._find_in_filecollection(file_to_find, file_collection_id) and returns: dict, json_file