<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)