class_docstr: Data provider for managing experiment lifecycle.
class_docstr_tok: ["Data","provider","for","managing","experiment","lifecycle","."]
code: def get_experiment(self, key, getinfo=True) -> Experiment:
      data = self._get(self._get_experiments_keybase() + key)
      if data is None:
          return None
  
      data["key"] = key
  
      experiment_stub = experiment_from_dict(data)
  
      expinfo = {}
      if getinfo:
          try:
              expinfo = self._get_experiment_info(experiment_stub)
          except Exception as exc:
              self.logger.info(
                  "Exception %s while info download for %s",
                  repr(exc),
                  key,
              )
  
      return experiment_from_dict(data, expinfo)
  
imports: import time
  from concurrent.futures import ThreadPoolExecutor, wait
  from studio.util import util, logs
  from studio.storage.storage_handler import StorageHandler
  from studio.artifacts.artifact import Artifact
  from studio.experiments.experiment import Experiment, experiment_from_dict
  from studio.storage.storage_setup import get_storage_verbose_level
  from studio.util.util import retry, report_fatal, compression_to_extension, check_for_kb_interrupt
label_desc: Use image node_id 20 for calling the KeyValueProvider obj's underlying member method code with example usage: obj.get_experiment(key, getinfo) and returns: experiment_from_dict, None