class_docstr: Contains general sensor behavior for DMS task.
  
  Subclasses should set ``target_statuses`` and ``termination_statuses`` fields.
  
  :param replication_task_arn: AWS DMS replication task ARN
  :param target_statuses: the target statuses, sensor waits until
      the task reaches any of these states
  :param termination_statuses: the termination statuses, sensor fails when
      the task reaches any of these states
  :param aws_conn_id: The Airflow connection used for AWS credentials.
      If this is ``None`` or empty then the default boto3 behaviour is used. If
      running Airflow in a distributed manner and aws_conn_id is None or
      empty, then default boto3 configuration would be used (and must be
      maintained on each worker node).
  :param region_name: AWS region_name. If not specified then the default boto3 behaviour is used.
  :param verify: Whether or not to verify SSL certificates. See:
      https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html
  :param botocore_config: Configuration dictionary (key-values) for botocore client. See:
      https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html
code: def poke(self, context: Context):
      if not (
          status := self.hook.get_task_status(self.replication_task_arn)
      ):
          # TODO: remove this if check when min_airflow_version is set to higher than 2.7.1
          message = f"Failed to read task status, task with ARN {self.replication_task_arn} not found"
          if self.soft_fail:
              raise AirflowSkipException(message)
          raise AirflowException(message)
  
      self.log.info(
          "DMS Replication task (%s) has status: %s",
          self.replication_task_arn,
          status,
      )
  
      if status in self.target_statuses:
          return True
  
      if status in self.termination_statuses:
          # TODO: remove this if check when min_airflow_version is set to higher than 2.7.1
          message = f"Unexpected status: {status}"
          if self.soft_fail:
              raise AirflowSkipException(message)
          raise AirflowException(message)
  
      return False
  
file_path: airflow/airflow/providers/amazon/aws/sensors/dms.py
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, Iterable, Sequence
  from deprecated import deprecated
  from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning, AirflowSkipException
  from airflow.providers.amazon.aws.hooks.dms import DmsHook
  from airflow.providers.amazon.aws.sensors.base_aws import AwsBaseSensor
  from airflow.providers.amazon.aws.utils.mixins import aws_template_fields
label_desc: Use image node_id 3 for calling the DmsTaskBaseSensor obj's underlying member method code with example usage: obj.poke(context) and returns: False, True