docs: def get_item_metadata(self, handle):
          """Return dictionary containing all metadata associated with handle.
  
          In other words all the metadata added using the ``add_item_metadata``
          method.
  
          :param handle: handle for accessing an item before the dataset is
                         frozen
          :returns: dictionary containing item metadata
          """
          if not self._metadata_dir_exists():
              return {}
  
          prefix = self._handle_to_fragment_absprefixpath(handle)
  
          files = [f for f in self._ls_abspaths_with_cache(
                   self._metadata_fragments_abspath)
                   if f.startswith(prefix)]
  
          metadata = {}
          for f in files:
              key = f.split('.')[-2]  # filename: identifier.key.json
              value = _get_obj(f)
              metadata[key] = value
  
          return metadata