class_docstr: Generator implementation class for AsyncPipelineTaskGenerator.
class_docstr_tok: ["Generator","implementation","class","for","AsyncPipelineTaskGenerator","."]
docstr: Calls `ensure_node_services` and returns status if given node is pure service node.
docstr_tok: ["Calls","`","ensure_node_services","`","and","returns","status","if","given","node","is","pure","service","node","."]
code: def _ensure_node_services_if_pure(
      self, node_id: str, backfill_token: str
  ) -> Optional[service_jobs.ServiceStatus]:
      """Calls `ensure_node_services` and returns status if given node is pure service node."""
      if self._service_job_manager.is_pure_service_node(
          self._pipeline_state, node_id
      ):
          return self._service_job_manager.ensure_node_services(
              self._pipeline_state, node_id, backfill_token
          )
      return None
  
imports: import sys
  import traceback
  from typing import Callable, List, Optional
  from absl import logging
  from tfx.orchestration import metadata
  from tfx.orchestration import node_proto_view
  from tfx.orchestration.experimental.core import constants
  from tfx.orchestration.experimental.core import event_observer
  from tfx.orchestration.experimental.core import mlmd_state
  from tfx.orchestration.experimental.core import pipeline_state
  from tfx.orchestration.experimental.core import service_jobs
  from tfx.orchestration.experimental.core import task
  from tfx.orchestration.experimental.core import task_gen
  from tfx.orchestration.experimental.core import task_gen_utils
  from tfx.orchestration import mlmd_connection_manager
  from tfx.orchestration.portable.input_resolution import exceptions
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.utils import status
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 4 for calling the _Generator obj's underlying member method code with example usage: obj._ensure_node_services_if_pure(node_id, backfill_token) and returns: None, self