def Append(self, value=None, **kwarg):
    """Add another member to the array.

    Args:
      value: The new data to append to the array.
      **kwarg:  Create a new element from these keywords.

    Returns:
      The value which was added. This can be modified further by the caller and
      changes will be propagated here.

    Raises:
      ValueError: If the value to add is not allowed.
    """
    if self.rdf_type is not None:
      if (isinstance(value, rdfvalue.RDFValue) and
          value.__class__ != self.rdf_type):
        raise ValueError("Can only accept %s" % self.rdf_type)

      try:
        # Try to coerce the value.
        value = self.rdf_type(value, **kwarg)   # pylint: disable=not-callable
      except (__HOLE__, ValueError):
        raise ValueError("Unable to initialize %s from type %s" % (
            self.__class__.__name__, type(value)))

    self.content.Append(DataBlob().SetValue(value))
dataset/ETHPy150Open google/grr/grr/lib/rdfvalues/protodict.py/RDFValueArray.Append