class_docstr: Context manager for setup/teardown tasks.
  
  :meta private:
code: def _push_tasks(
      cls,
      operator: AbstractOperator | list[AbstractOperator],
      setup: bool = False,
  ):
      if isinstance(operator, list):
          if any(
              task.is_setup != operator[0].is_setup for task in operator
          ):
              cls.error(
                  "All tasks in the list must be either setup or teardown tasks"
              )
      if setup:
          cls.push_context_managed_setup_task(operator)
          # workout the teardown
          cls._update_teardown_downstream(operator)
      else:
          cls.push_context_managed_teardown_task(operator)
          # workout the setups
          cls._update_setup_upstream(operator)
  
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, cast
  from airflow.exceptions import AirflowException
label_desc: Use image node_id 11 for calling the BaseSetupTeardownContext obj's underlying member method code with example usage: obj._push_tasks(cls, operator, setup) without return types