class_docstr: Asynchronously poll the boto3 API and wait for the JobFlow to finish executing.
  
  :param job_flow_id: The id of the job flow to wait for.
  :param waiter_delay: The amount of time in seconds to wait between attempts.
  :param waiter_max_attempts: The maximum number of attempts to be made.
  :param aws_conn_id: The Airflow connection used for AWS credentials.
class_docstr_tok: ["Asynchronously","poll","the","boto3","API","and","wait","for","the","JobFlow","to","finish","executing",".",":","param","job_flow_id",":","The","id","of","the","job","flow","to","wait","for",".",":","param","waiter_delay",":","The","amount","of","time","in","seconds","to","wait","between","attempts",".",":","param","waiter_max_attempts",":","The","maximum","number","of","attempts","to","be","made",".",":","param","aws_conn_id",":","The","Airflow","connection","used","for","AWS","credentials","."]
code: def __init__(
      self,
      job_flow_id: str,
      poll_interval: int | None = None,  # deprecated
      max_attempts: int | None = None,  # deprecated
      aws_conn_id: str | None = None,
      waiter_delay: int = 30,
      waiter_max_attempts: int = 60,
  ):
      if poll_interval is not None or max_attempts is not None:
          warnings.warn(
              "please use waiter_delay instead of poll_interval "
              "and waiter_max_attempts instead of max_attempts",
              AirflowProviderDeprecationWarning,
              stacklevel=2,
          )
          waiter_delay = poll_interval or waiter_delay
          waiter_max_attempts = max_attempts or waiter_max_attempts
      super().__init__(
          serialized_fields={"job_flow_id": job_flow_id},
          waiter_name="job_flow_waiting",
          waiter_args={"ClusterId": job_flow_id},
          failure_message="JobFlow creation failed",
          status_message="JobFlow creation in progress",
          status_queries=[
              "Cluster.Status.State",
              "Cluster.Status.StateChangeReason",
              "Cluster.Status.ErrorDetails",
          ],
          return_key="job_flow_id",
          return_value=job_flow_id,
          waiter_delay=waiter_delay,
          waiter_max_attempts=waiter_max_attempts,
          aws_conn_id=aws_conn_id,
      )
  
imports: from __future__ import annotations
  import warnings
  from typing import TYPE_CHECKING
  from airflow.exceptions import AirflowProviderDeprecationWarning
  from airflow.providers.amazon.aws.hooks.emr import EmrContainerHook, EmrHook, EmrServerlessHook
  from airflow.providers.amazon.aws.triggers.base import AwsBaseWaiterTrigger
label_desc: Use image node_id 1 to create a new EmrCreateJobFlowTrigger object from inherited base classes: AwsBaseWaiterTrigger with example: obj = EmrCreateJobFlowTrigger(job_flow_id, poll_interval, max_attempts, aws_conn_id, waiter_delay, waiter_max_attempts)