Set a property on the document.

        Calling code should use this method to add and modify properties
        on the document instead of modifying ``properties`` directly.

        If ``key`` is ``"_links"`` or ``"_embedded"`` this method will silently
        fail.

        If there is no property with the name in ``key``, a new property is
        created with the name from ``key`` and the value from ``value``. If
        the document already has a property with that name, it's value
        is replaced with the value in ``value``.

def set_property(self, key, value):
        """Set a property on the document.

        Calling code should use this method to add and modify properties
        on the document instead of modifying ``properties`` directly.

        If ``key`` is ``"_links"`` or ``"_embedded"`` this method will silently
        fail.

        If there is no property with the name in ``key``, a new property is
        created with the name from ``key`` and the value from ``value``. If
        the document already has a property with that name, it's value
        is replaced with the value in ``value``.

        """
        if key in self.RESERVED_ATTRIBUTE_NAMES:
            return
        self.o[key] = value