code: def save_sources(self, ex_info):
      from .bases import BufferedReaderWrapper
  
      source_info = []
      for source_name, md5 in ex_info["sources"]:
          # Substitute any HOME or Environment Vars to get absolute path
          abs_path = os.path.join(ex_info["base_dir"], source_name)
          abs_path = os.path.expanduser(abs_path)
          abs_path = os.path.expandvars(abs_path)
          handle = BufferedReaderWrapper(open(abs_path, "rb"))
  
          file = self.fs.get(md5)
          if file:
              id_ = file.id
          else:
              address = self.fs.put(abs_path)
              id_ = address.id
          source_info.append([source_name, id_, handle])
      return source_info
  
imports: from __future__ import division, print_function, unicode_literals, absolute_import
  import os
  import textwrap
  import uuid
  from collections import OrderedDict
  import warnings
  from sacred.__about__ import __version__
  from sacred.commandline_options import cli_option
  from sacred.observers import RunObserver
label_desc: Use image node_id 5 for calling the TinyDbObserver obj's underlying member method code with example usage: obj.save_sources(ex_info) and returns: source_info