class_docstr: Launches PODS.
docstr: Tests if spark_obj_spec has not started.
code: def spark_job_not_running(self, spark_obj_spec):
      """Tests if spark_obj_spec has not started."""
      spark_job_info = (
          self.custom_obj_api.get_namespaced_custom_object_status(
              group=self.api_group,
              version=self.api_version,
              namespace=self.namespace,
              name=spark_obj_spec["metadata"]["name"],
              plural=self.plural,
          )
      )
      driver_state = (
          spark_job_info.get("status", {})
          .get("applicationState", {})
          .get("state", "SUBMITTED")
      )
      if driver_state == CustomObjectStatus.FAILED:
          err = (
              spark_job_info.get("status", {})
              .get("applicationState", {})
              .get("errorMessage", "N/A")
          )
          try:
              self.pod_manager.fetch_container_logs(
                  pod=self.pod_spec,
                  container_name="spark-kubernetes-driver",
              )
          except Exception:
              pass
          raise AirflowException(
              f"Spark Job Failed. Error stack: {err}"
          )
      return driver_state == CustomObjectStatus.SUBMITTED
  
imports: from __future__ import annotations
  import time
  from copy import deepcopy
  from datetime import datetime
  from functools import cached_property
  import tenacity
  from kubernetes.client import CoreV1Api, CustomObjectsApi, models
  from kubernetes.client.rest import ApiException
  from airflow.exceptions import AirflowException
  from airflow.providers.cncf.kubernetes.resource_convert.configmap import convert_configmap, convert_configmap_to_volume
  from airflow.providers.cncf.kubernetes.resource_convert.env_variable import convert_env_vars
  from airflow.providers.cncf.kubernetes.resource_convert.secret import convert_image_pull_secrets, convert_secret
  from airflow.providers.cncf.kubernetes.utils.pod_manager import PodManager
  from airflow.utils.log.logging_mixin import LoggingMixin
label_desc: Use image node_id 5 for calling the CustomObjectLauncher obj's underlying member method code with example usage: obj.spark_job_not_running(spark_obj_spec) and returns: unknown