class_docstr: A struct to store information for an execution.
code: def to_proto(self) -> execution_invocation_pb2.ExecutionInvocation:
      return execution_invocation_pb2.ExecutionInvocation(
          execution_id=self.execution_id,
          input_dict=data_types_utils.build_artifact_struct_dict(
              self.input_dict
          ),
          output_dict=data_types_utils.build_artifact_struct_dict(
              self.output_dict
          ),
          # TODO(b/171794016): Deprecate execution_properties once
          # execution_properties_with_schema is used to build execution
          # properties.
          execution_properties=data_types_utils.build_metadata_value_dict(
              self.exec_properties
          ),
          execution_properties_with_schema=data_types_utils.build_pipeline_value_dict(
              self.exec_properties
          ),
          output_metadata_uri=self.execution_output_uri,
          stateful_working_dir=self.stateful_working_dir,
          tmp_dir=self.tmp_dir,
          pipeline_node=self.pipeline_node,
          pipeline_info=self.pipeline_info,
          pipeline_run_id=self.pipeline_run_id,
          top_level_pipeline_run_id=self.top_level_pipeline_run_id,
          frontend_url=self.frontend_url,
      )
  
file_path: tfx/tfx/orchestration/portable/data_types.py
imports: from typing import Any, Dict, List, Optional
  import attr
  from tfx import types
  from tfx.orchestration import data_types_utils
  from tfx.proto.orchestration import execution_invocation_pb2
  from tfx.proto.orchestration import pipeline_pb2
label_desc: Use image node_id 1 for calling the ExecutionInfo obj's underlying member method code with example usage: obj.to_proto() and returns: execution_invocation_pb2