class_docstr: TFX infra validator executor.
class_docstr_tok: ["TFX","infra","validator","executor","."]
code: def _Do(
      self,
      model: types.Artifact,
      examples: Optional[types.Artifact],
      blessing: types.Artifact,
      serving_spec: infra_validator_pb2.ServingSpec,
      validation_spec: infra_validator_pb2.ValidationSpec,
      request_spec: Optional[infra_validator_pb2.RequestSpec],
  ):
      if examples and request_spec:
          logging.info(
              "InfraValidator will be run in LOAD_AND_QUERY mode."
          )
          requests = request_builder.build_requests(
              model_name=serving_spec.model_name,
              model=model,
              examples=examples,
              request_spec=request_spec,
          )
      else:
          logging.info("InfraValidator will be run in LOAD_ONLY mode.")
          requests = []
  
      model_path = self._PrepareModelPath(model, serving_spec)
      # TODO(jjong): Make logic parallel.
      all_passed = True
      for serving_binary in serving_bins.parse_serving_binaries(
          serving_spec
      ):
          all_passed &= self._ValidateWithRetry(
              model_path=model_path,
              serving_binary=serving_binary,
              serving_spec=serving_spec,
              validation_spec=validation_spec,
              requests=requests,
          )
  
      if all_passed:
          _mark_blessed(blessing)
          if requests and request_spec.make_warmup:
              self._CreateWarmupModel(
                  blessing, model_path, warmup_requests=requests
              )
      else:
          _mark_not_blessed(blessing)
  
imports: import contextlib
  import functools
  import os
  import signal
  import threading
  import time
  from typing import Any, Dict, List, Optional
  from absl import logging
  from tfx import types
  from tfx.components.infra_validator import error_types
  from tfx.components.infra_validator import request_builder
  from tfx.components.infra_validator import serving_bins
  from tfx.components.infra_validator import types
  from tfx.components.infra_validator.model_server_runners import kubernetes_runner
  from tfx.components.infra_validator.model_server_runners import local_docker_runner
  from tfx.dsl.components.base import base_executor
  from tfx.proto import infra_validator_pb2
  from tfx.types import artifact_utils
  from tfx.types import standard_component_specs
  from tfx.utils import io_utils
  from tfx.utils import path_utils
  from tfx.utils import proto_utils
  from tfx.utils.model_paths import tf_serving_flavor
  from tensorflow_serving.apis import classification_pb2
  from tensorflow_serving.apis import predict_pb2
  from tensorflow_serving.apis import prediction_log_pb2
  from tensorflow_serving.apis import regression_pb2
label_desc: Use image node_id 6 for calling the Executor obj's underlying member method code with example usage: obj._Do(model, examples, blessing, serving_spec, validation_spec, request_spec) without return types