class_docstr: Data provider for managing experiment lifecycle.
class_docstr_tok: ["Data","provider","for","managing","experiment","lifecycle","."]
code: def get_user_experiments(self, userid=None):
      if userid and "@" in userid:
          users = self.get_users()
          user_ids = [
              u for u in users if users[u].get("email") == userid
          ]
          if len(user_ids) < 1:
              return None
          userid = user_ids[0]
  
      experiment_keys = self._get(
          self._get_user_keybase(userid) + "experiments/", shallow=True
      )
      if not experiment_keys:
          experiment_keys = []
  
      return experiment_keys
  
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 21 for calling the KeyValueProvider obj's underlying member method code with example usage: obj.get_user_experiments(userid) and returns: experiment_keys, None