class_docstr: Short-circuit in case of an empty AppFlow's run.
  
  .. seealso::
      For more information on how to use this operator, take a look at the guide:
      :ref:`howto/operator:AppflowRecordsShortCircuitOperator`
  
  :param flow_name: The flow name
  :param appflow_run_task_id: Run task ID from where this operator should extract the execution ID
  :param ignore_downstream_trigger_rules: Ignore downstream trigger rules
  :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 _has_new_records_func(self, **kwargs) -> bool:
      appflow_task_id = kwargs["appflow_run_task_id"]
      self.log.info("appflow_task_id: %s", appflow_task_id)
      flow_name = kwargs["flow_name"]
      self.log.info("flow_name: %s", flow_name)
      af_client = self.hook.conn
      task_instance = kwargs["task_instance"]
      execution_id = task_instance.xcom_pull(task_ids=appflow_task_id, key="execution_id")  # type: ignore
      if not execution_id:
          raise AirflowException(
              f"No execution_id found from task_id {appflow_task_id}!"
          )
      self.log.info("execution_id: %s", execution_id)
      args = {"flowName": flow_name, "maxResults": 100}
      response: DescribeFlowExecutionRecordsResponseTypeDef = cast(
          "DescribeFlowExecutionRecordsResponseTypeDef", {}
      )
      record = None
  
      while not record:
          if "nextToken" in response:
              response = af_client.describe_flow_execution_records(
                  nextToken=response["nextToken"], **args
              )
          else:
              response = af_client.describe_flow_execution_records(
                  **args
              )
          record = AppflowRecordsShortCircuitOperator._get_target_execution_id(
              response["flowExecutions"], execution_id
          )
          if not record and "nextToken" not in response:
              raise AirflowException(
                  f"Flow ({execution_id}) without recordsProcessed info."
              )
  
      execution = record.get("executionResult", {})
      if "recordsProcessed" not in execution:
          raise AirflowException(
              f"Flow ({execution_id}) without recordsProcessed info!"
          )
      records_processed = execution["recordsProcessed"]
      self.log.info("records_processed: %d", records_processed)
      task_instance.xcom_push("records_processed", records_processed)  # type: ignore
      return records_processed > 0
  
imports: from __future__ import annotations
  import time
  import warnings
  from datetime import datetime, timedelta
  from typing import TYPE_CHECKING, cast
  from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
  from airflow.operators.python import ShortCircuitOperator
  from airflow.providers.amazon.aws.hooks.appflow import AppflowHook
  from airflow.providers.amazon.aws.operators.base_aws import AwsBaseOperator
  from airflow.providers.amazon.aws.utils import datetime_to_epoch_ms
  from airflow.providers.amazon.aws.utils.mixins import AwsBaseHookMixin, AwsHookParams, aws_template_fields
label_desc: Use image node_id 3 for calling the AppflowRecordsShortCircuitOperator obj's underlying member method code with example usage: obj._has_new_records_func() and returns: unknown