def assert_valid(self, instance, value=None):
        """Returns True if the Property is valid on a HasProperties instance

        Raises a ValueError if the value required and not set, not valid,
        not correctly coerced, etc.

        .. note::

            Unlike :code:`validate`, this method requires instance to be
            a HasProperties instance; it cannot be None.
        """
        if value is None:
            value = instance._get(self.name)
        if value is None and self.required:
            message = (
                "The '{name}' property of a {cls} instance is required "
                "and has not been set.".format(
                    name=self.name,
                    cls=instance.__class__.__name__
                )
            )
            raise ValidationError(message, 'missing', self.name, instance)
        valid = super(Property, self).assert_valid(instance, value)
        return valid
Returns True if the Property is valid on a HasProperties instance

        Raises a ValueError if the value required and not set, not valid,
        not correctly coerced, etc.

        .. note::

            Unlike :code:`validate`, this method requires instance to be
            a HasProperties instance; it cannot be None.