code: def testMakeProtoPlaceholder_AnySubmessagePlaceholder(self):
      actual = resolve(
          _MetadataStoreValue(
              # We can directly assign a message of any type and it will pack it.
              proto_value=ph.make_proto(
                  pipeline_pb2.PipelineNode(),
                  upstream_nodes=[
                      ph.execution_invocation().pipeline_run_id
                      + "-foo",
                  ],
              )
          )
      )
      self.assertProtoEquals(
          """
          proto_value {
            [type.googleapis.com/tfx.orchestration.PipelineNode] {
              upstream_nodes: "test-run-id-foo"
            }
          }
          """,
          parse_text_proto(actual, metadata_store_pb2.Value),
      )
  
imports: import base64
  import functools
  from typing import Any, Dict, Optional, Type, TypeVar
  import tensorflow
  from tfx.dsl.compiler import placeholder_utils
  from tfx.dsl.placeholder import placeholder
  from tfx.dsl.placeholder import proto_placeholder
  from tfx.orchestration.portable import data_types
  from tfx.proto.orchestration import execution_invocation_pb2
  from tfx.proto.orchestration import pipeline_pb2
  from google.protobuf import message
  from google.protobuf import text_format
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 27 for calling the ProtoPlaceholderTest obj's underlying member method code with example usage: obj.testMakeProtoPlaceholder_AnySubmessagePlaceholder() without return types