code: def _contains_foreach(self):
      for node in self.graph:
          if node.type == "foreach":
              return True
      return False
  
imports: import json
  import os
  import random
  import string
  import sys
  from datetime import datetime, timedelta
  from io import BytesIO
  import metaflow.util
  from metaflow import current
  from metaflow.decorators import flow_decorators
  from metaflow.exception import MetaflowException
  from metaflow.includefile import FilePathClass
  from metaflow.metaflow_config import AIRFLOW_KUBERNETES_CONN_ID, AIRFLOW_KUBERNETES_KUBECONFIG_CONTEXT, AIRFLOW_KUBERNETES_KUBECONFIG_FILE, AIRFLOW_KUBERNETES_STARTUP_TIMEOUT_SECONDS, AWS_SECRETS_MANAGER_DEFAULT_REGION, AZURE_STORAGE_BLOB_SERVICE_ENDPOINT, CARD_AZUREROOT, CARD_GSROOT, CARD_S3ROOT, DATASTORE_SYSROOT_AZURE, DATASTORE_SYSROOT_GS, DATASTORE_SYSROOT_S3, DATATOOLS_S3ROOT, DEFAULT_SECRETS_BACKEND_TYPE, KUBERNETES_SECRETS, KUBERNETES_SERVICE_ACCOUNT, S3_ENDPOINT_URL, SERVICE_HEADERS, SERVICE_INTERNAL_URL
  from metaflow.metaflow_config_funcs import config_values
  from metaflow.parameters import DelayedEvaluationParameter, JSONTypeClass, deploy_time_eval
  from metaflow.plugins.cards.card_modules import chevron
  from metaflow.plugins.kubernetes.kubernetes import Kubernetes
  from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
  from metaflow.util import compress_list, dict_to_cli_options, get_username
  from .None import airflow_utils
  from .airflow_utils import AIRFLOW_MACROS, TASK_ID_XCOM_KEY, AirflowTask, Workflow
  from .exception import AirflowException
  from .sensors import SUPPORTED_SENSORS
label_desc: Use image node_id 15 for calling the Airflow obj's underlying member method code with example usage: obj._contains_foreach() and returns: False, True