class_docstr: This class is not meant to be overridden and is meant to be common across
  different datastores.
class_docstr_tok: ["This","class","is","not","meant","to","be","overridden","and","is","meant","to","be","common","across","different","datastores","."]
docstr: Mirror function of save_blobs
  
  This function is guaranteed to return the bytes passed to save_blob for
  the keys
  
  Parameters
  ----------
  keys : List of string
      Key describing the object to load
  force_raw : bool, optional
      Support for backward compatibility with previous datastores. If
      True, this will force the key to be loaded as is (raw). By default,
      False
  
  Returns
  -------
  Returns an iterator of (string, bytes) tuples; the iterator may return keys
  in a different order than were passed in.
docstr_tok: ["Mirror","function","of","save_blobs","This","function","is","guaranteed","to","return","the","bytes","passed","to","save_blob","for","the","keys","Parameters","--","--","--","--","--","keys",":","List","of","string","Key","describing","the","object","to","load","force_raw",":","bool",",","optional","Support","for","backward","compatibility","with","previous","datastores",".","If","True",",","this","will","force","the","key","to","be","loaded","as","is","(","raw",")",".","By","default",",","False","Returns","--","--","--","-","Returns","an","iterator","of","(","string",",","bytes",")","tuples",";","the","iterator","may","return","keys","in","a","different","order","than","were","passed","in","."]
code: def load_blobs(self, keys, force_raw=False):
      """
      Mirror function of save_blobs
  
      This function is guaranteed to return the bytes passed to save_blob for
      the keys
  
      Parameters
      ----------
      keys : List of string
          Key describing the object to load
      force_raw : bool, optional
          Support for backward compatibility with previous datastores. If
          True, this will force the key to be loaded as is (raw). By default,
          False
  
      Returns
      -------
      Returns an iterator of (string, bytes) tuples; the iterator may return keys
      in a different order than were passed in.
      """
      load_paths = []
      for key in keys:
          blob = None
          if self._blob_cache:
              blob = self._blob_cache.load_key(key)
          if blob is not None:
              yield key, blob
          else:
              path = self._storage_impl.path_join(
                  self._prefix, key[:2], key
              )
              load_paths.append((key, path))
  
      with self._storage_impl.load_bytes(
          [p for _, p in load_paths]
      ) as loaded:
          for path_key, file_path, meta in loaded:
              key = self._storage_impl.path_split(path_key)[-1]
              # At this point, we either return the object as is (if raw) or
              # decode it according to the encoding version
              with open(file_path, "rb") as f:
                  if force_raw or (meta and meta.get("cas_raw", False)):
                      blob = f.read()
                  else:
                      if meta is None:
                          # Previous version of the datastore had no meta
                          # information
                          unpack_code = self._unpack_backward_compatible
                      else:
                          version = meta.get("cas_version", -1)
                          if version == -1:
                              raise DataException(
                                  "Could not extract encoding version for '%s'"
                                  % path
                              )
                          unpack_code = getattr(
                              self, "_unpack_v%d" % version, None
                          )
                          if unpack_code is None:
                              raise DataException(
                                  "Unknown encoding version %d for '%s' -- "
                                  "the artifact is either corrupt or you "
                                  "need to update Metaflow to the latest "
                                  "version" % (version, path)
                              )
                      try:
                          blob = unpack_code(f)
                      except Exception as e:
                          raise DataException(
                              "Could not unpack artifact '%s': %s"
                              % (path, e)
                          )
  
              if self._blob_cache:
                  self._blob_cache.store_key(key, blob)
  
              yield key, blob
  
file_path: metaflow/metaflow/datastore/content_addressed_store.py
imports: import gzip
  from collections import namedtuple
  from hashlib import sha1
  from io import BytesIO
  from ..exception import MetaflowInternalError
  from .exceptions import DataException
label_desc: Use image node_id 4 for calling the ContentAddressedStore obj's underlying member method code with example usage: obj.load_blobs(keys, force_raw) without return types