class_docstr: Dataset object constructed from name, description, url, key_properties,
  and versions specified in JSON configuration file or a provided :obj:`dict`
  mapping dataset names to configurations.
  
  Parameters
  ----------
  name : :obj:`str`
      Name of dataset.
  description : :obj:`str`
      Brief description of dataset.
  url : :obj:`str`
      Cloud URL to access dataset.
  key_properties : :class:`set` of :obj:`str`
      Set containing key property strings, if present. Valid properties
      include ``'gene'`` and ``'unique'``.
  versions : :class:`list` of :class:`.DatasetVersion`
      List of :class:`.DatasetVersion` objects.
code: def __init__(
      self,
      name: str,
      description: str,
      url: str,
      key_properties: Set[str],
      versions: List[DatasetVersion],
  ):
      assert set(key_properties).issubset(DB._valid_key_properties)
      self.name = name
      self.description = description
      self.url = url
      self.key_properties = key_properties
      self.versions = versions
  
imports: import json
  import os
  import warnings
  from typing import Iterable, List, Optional, Set, Tuple, Union
  import hail
  import pkg_resources
  from hailtop.utils import external_requests_client_session, retry_response_returning_functions
  from .lens import MatrixRows, TableRows
  from ..expr import StructExpression
  from ..matrixtable import MatrixTable, matrix_table_type
  from ..table import Table, table_type
  from ..typecheck import oneof, typecheck_method
  from ..utils.java import Env, info
label_desc: Use image node_id 2 to create a new Dataset object  with example: obj = Dataset(name, description, url, key_properties, versions)