code: def poll_job(
      self, job_key, timeoutSecs=10, retryDelaySecs=0.5, **kwargs
  ):
      params_dict = {}
      h2o_test_utils.check_params_update_kwargs(
          params_dict, kwargs, "poll_job", H2O.verbose
      )
  
      start_time = time.time()
      while True:
          H2O.verboseprint("Polling for job: " + job_key + ". . .")
          result = self.__do_json_request(
              "/3/Jobs/" + job_key,
              timeout=timeoutSecs,
              params=params_dict,
          )
  
          status = result["jobs"][0]["status"]
          if (
              status == "DONE"
              or status == "CANCELLED"
              or status == "FAILED"
          ):
              H2O.verboseprint("Job " + status + ": " + job_key + ".")
              return result
  
          if time.time() - start_time > timeoutSecs:
              print(
                  "Job: "
                  + job_key
                  + " timed out in: "
                  + str(timeoutSecs)
                  + "."
              )
              # downstream checkers should tolerate None. Print msg in case it's overlooked.
              return None
  
          time.sleep(retryDelaySecs)
  
imports: import sys, os, getpass, logging, time, inspect, requests, json, pprint
  import h2o_test_utils
  from h2o_test_utils import log, log_rest
  import h2o_print
label_desc: Use image node_id 10 for calling the H2O obj's underlying member method code with example usage: obj.poll_job(job_key, timeoutSecs, retryDelaySecs) and returns: result, None