code: def _set_field_on_message(msg, key, value):
      
      # Attempt to set the value on the types of objects we know how to deal
      # with.
      if isinstance(value, (collections_abc.MutableSequence, tuple)):
          # Clear the existing repeated protobuf message of any elements
          # currently inside it.
          while getattr(msg, key):
              getattr(msg, key).pop()
  
          # Write our new elements to the repeated field.
          for item in value:
              if isinstance(item, collections_abc.Mapping):
                  getattr(msg, key).add(**item)
              else:
                  # protobuf's RepeatedCompositeContainer doesn't support
                  # append.
                  getattr(msg, key).extend([item])
      elif isinstance(value, collections_abc.Mapping):
          # Assign the dictionary values to the protobuf message.
          for item_key, item_value in value.items():
              set(getattr(msg, key), item_key, item_value)
      elif isinstance(value, message.Message):
          getattr(msg, key).CopyFrom(value)
      else:
          setattr(msg, key, value)
docs: Set helper for protobuf Messages.