Updates a content property.

        The body contains the representation of the content property. Must include the property id, and the new version
        number. Attempts to create a new content property if the given version number is 1, just like
        {@link #create(com.atlassian.confluence.api.model.content.id.ContentId, String,
            com.atlassian.confluence.api.model.content.JsonContentProperty)}.
        :param content_id (string): The ID for the content to attach the property to.
        :param property_key (string): The key for the property to update.
        :param new_property_data (dict): The updated property data. This requires the keys "key", "value", and
                                         "version".
        :param callback: OPTIONAL: The callback to execute on the resulting data, before the method returns.
                         Default: None (no callback, raw data returned).
        :return: The JSON data returned from the content/{id}/property/{key} endpoint,
                 or the results of the callback. Will raise requests.HTTPError on bad input, potentially.

        Example updated property data:
        {
            "key": "example-property-key",
            "value": {
                "anything": "goes"
            },
            "version": {
                "number": 2,
                "minorEdit": false
            }
        }

def update_property(self, content_id, property_key, new_property_data, callback=None):
        """
        Updates a content property.

        The body contains the representation of the content property. Must include the property id, and the new version
        number. Attempts to create a new content property if the given version number is 1, just like
        {@link #create(com.atlassian.confluence.api.model.content.id.ContentId, String,
            com.atlassian.confluence.api.model.content.JsonContentProperty)}.
        :param content_id (string): The ID for the content to attach the property to.
        :param property_key (string): The key for the property to update.
        :param new_property_data (dict): The updated property data. This requires the keys "key", "value", and
                                         "version".
        :param callback: OPTIONAL: The callback to execute on the resulting data, before the method returns.
                         Default: None (no callback, raw data returned).
        :return: The JSON data returned from the content/{id}/property/{key} endpoint,
                 or the results of the callback. Will raise requests.HTTPError on bad input, potentially.

        Example updated property data:
        {
            "key": "example-property-key",
            "value": {
                "anything": "goes"
            },
            "version": {
                "number": 2,
                "minorEdit": false
            }
        }
        """
        assert isinstance(new_property_data, dict) and {"key", "value", "version"} <= set(new_property_data.keys())
        return self._service_put_request("rest/api/content/{id}/property/{key}".format(id=content_id, key=property_key),
                                         data=json.dumps(new_property_data),
                                         headers={"Content-Type": "application/json"}, callback=callback)