class_docstr: Allows previously-generated Artifacts to be used in a new pipeline run.
  
  By implementing this in a class (instead of a function), we reduce the
  number of MLMD reads when reusing the outputs of multiple nodes in the same
  pipeline run.
class_docstr_tok: ["Allows","previously-generated","Artifacts","to","be","used","in","a","new","pipeline","run",".","By","implementing","this","in","a","class","(","instead","of","a","function",")",",","we","reduce","the","number","of","MLMD","reads","when","reusing","the","outputs","of","multiple","nodes","in","the","same","pipeline","run","."]
docstr: Gets all successful Executions of a given node in a given pipeline run.
  
  Args:
    node: The node whose Executions to query.
  
  Returns:
    All successful executions for that node at that run_id.
  
  Raises:
    LookupError: If no successful Execution was found.
docstr_tok: ["Gets","all","successful","Executions","of","a","given","node","in","a","given","pipeline","run",".","Args",":","node",":","The","node","whose","Executions","to","query",".","Returns",":","All","successful","executions","for","that","node","at","that","run_id",".","Raises",":","LookupError",":","If","no","successful","Execution","was","found","."]
code: def _get_successful_executions(
      self, node: node_proto_view.NodeProtoView
  ) -> List[metadata_store_pb2.Execution]:
      """Gets all successful Executions of a given node in a given pipeline run.
  
      Args:
        node: The node whose Executions to query.
  
      Returns:
        All successful executions for that node at that run_id.
  
      Raises:
        LookupError: If no successful Execution was found.
      """
      node_context = self._get_node_context(node)
      node_id = node.node_info.id
      if not self._base_run_context:
          raise LookupError(
              f"No previous run is found for {node_id}. "
              "You need to have completed a pipeline run before performing a "
              "partial run with artifact reuse."
          )
  
      all_associated_executions = (
          execution_lib.get_executions_associated_with_all_contexts(
              self._mlmd,
              contexts=[node_context, self._base_run_context],
          )
      )
      prev_successful_executions = [
          e
          for e in all_associated_executions
          if execution_lib.is_execution_successful(e)
      ]
      if not prev_successful_executions:
          raise LookupError(
              f"No previous successful executions found for node_id {node_id} in "
              f"pipeline_run {self._base_run_context.name}"
          )
  
      return prev_successful_executions
  
imports: import collections
  import concurrent.futures
  import enum
  from typing import Collection, Dict, Final, List, Mapping, Optional, OrderedDict, Sequence, Set, Tuple
  import uuid
  from absl import logging
  from tfx.dsl.compiler import compiler_utils
  from tfx.dsl.compiler import constants
  from tfx.orchestration import metadata
  from tfx.orchestration import node_proto_view
  from tfx.orchestration.portable import execution_publish_utils
  from tfx.orchestration.portable.mlmd import context_lib
  from tfx.orchestration.portable.mlmd import execution_lib
  from tfx.proto.orchestration import pipeline_pb2
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 4 for calling the _ArtifactRecycler obj's underlying member method code with example usage: obj._get_successful_executions(node) and returns: prev_successful_executions