class_docstr: Generic GRIB file handler.
class_docstr_tok: ["Generic","GRIB","file","handler","."]
code: def _create_dataset_ids(self, keys):
      from itertools import product
  
      ordered_keys = [k for k in keys.keys() if "id_key" in keys[k]]
      for id_vals in product(
          *[keys[k]["values"] for k in ordered_keys]
      ):
          id_keys = [keys[k]["id_key"] for k in ordered_keys]
          msg_info = dict(zip(ordered_keys, id_vals))
          ds_info = dict(zip(id_keys, id_vals))
          msg_id = DataQuery(**ds_info)
          ds_info = msg_id.to_dict()
          ds_info.update(msg_info)
          ds_info["file_type"] = self.filetype_info["file_type"]
          self._msg_datasets[msg_id] = ds_info
  
imports: import logging
  from datetime import datetime
  import dask.array
  import numpy
  import pygrib
  import xarray
  from pyproj import Proj
  from pyresample import geometry
  from satpy.dataset import DataQuery
  from satpy.readers.file_handlers import BaseFileHandler
  from satpy.utils import get_legacy_chunk_size
label_desc: Use image node_id 3 for calling the GRIBFileHandler obj's underlying member method code with example usage: obj._create_dataset_ids(keys) without return types