code: def indexed_file(self, f):
      
      filename, handle = f
      if handle is None and filename is not None:
        handle = open(filename)
      if (handle is None and filename is None) or \
         (filename != self._indexed_filename) or \
         (handle != self._indexed_file_handle):
        self.index = {}
      if ((handle is not None or filename is not None) and
         (self.record_iterator is None or self.record_hash_function is None)):
        raise IndexError("Setting index file failed; reason: iterator "
                         "(self.record_iterator) or hash function "
                         "(self.record_hash_function) have to be set first")
      self._indexed_filename = filename
      self._indexed_file_handle = handle
docs: Setter for information about the file this object indexes.
  
      :param f: a tuple of (filename, handle), either (or both) of which can be
                None. If the handle is None, but filename is provided, then
                handle is created from the filename. If both handle and filename
                are None, or they don't match the previous values indexed by this
                object, any current data in this index is cleared. If either are
                not None, we require the iterator and the hash function for this
                object to already be set.